Google chrome extension Google Chrome:在“中更新扩展”;“开发模式”;(本地)从用户脚本

Google chrome extension Google Chrome:在“中更新扩展”;“开发模式”;(本地)从用户脚本,google-chrome-extension,Google Chrome Extension,我为Google Chrome创建了一个扩展,它为指定的网页运行一个小的用户脚本,并通过background.js向Chrome API(比如Chrome.tabs和其他)发出一些请求 现在,我正在“开发人员模式”下对其进行本地测试,如下所示: 我编辑我的userscript.js和background.js 然后我转到chrome://extensions在Google Chrome中的选项卡,并从本地D:\my extension文件夹手动重新加载(CTR+R)我的分机 最后,我切换到带有指

我为Google Chrome创建了一个扩展,它为指定的网页运行一个小的用户脚本,并通过background.js向Chrome API(比如Chrome.tabs和其他)发出一些请求

现在,我正在“开发人员模式”下对其进行本地测试,如下所示:

  • 我编辑我的userscript.js和background.js
  • 然后我转到chrome://extensions在Google Chrome中的选项卡,并从本地D:\my extension文件夹手动重新加载(CTR+R)我的分机
  • 最后,我切换到带有指定网页的选项卡,并重新加载它以查看更改
  • 问题是:
    由于我是一名初学者,在扩展和userscript开始按预期工作之前,必须对userscript.js和background.js进行大量更改。 因此,在测试过程中,这个过程需要在扩展和页面标签之间进行大量单调的切换

    想法是:
    最好在测试用户脚本的页面上添加一个按钮或快捷键,并在我的用户脚本中附加一种“更新\扩展\和\重新加载\页面”功能,这样每当我单击此按钮时,它都会从本地文件夹D:\我的扩展名,然后再从页面重新加载中调用扩展名更新。(另一种选择是将“更新扩展名”和“重新加载页面”功能分配给扩展名的浏览器操作图标。)

    现在,我只是感兴趣:

    是否有任何类型的“chrome.extesion.update”方法,以便我可以通过background.js从我的userscript.js向它发出请求,并调用扩展的自动重新加载(在“开发人员模式”下),而无需转到chrome://extensions选项卡

    这就是你要找的吗

    功劳消失


    通过调用,扩展可以重新加载自身,因此只需触发扩展即可

    以下代码将以下功能附加到浏览器操作按钮:

  • 跟踪活动选项卡
  • 重新加载扩展
  • 重新加载活动选项卡
  • manifest.json

    ...
    "browser_action": {
        "default_title": "Reload"
    //    "default_icon": {
    //        "19": "img/icon19.png",
    //        "38": "img/icon38.png"
    //    },
    },
    ...
    
    ...
    "background":{ "scripts": ["background.js"]},
    
    "content_scripts" : [{
            "matches" : ["https://stackoverflow.com/*"],
            "css": ["userscript.css"],          
            "js": ["jquery-latest.min.js", "userscript.js"],
            "run_at":"document_end"  
    }], 
    
    "web_accessible_resources": ["jquery-latest.min.map"],
    
    "permissions": ["tabs"], 
    
    "browser_action": {
        "default_icon": "icon19.png",
        "default_title": "My Extension Title",
        "default_popup": "popup.html"
    }
    ...
    
    background.js

    chrome.browserAction.onClicked.addListener(function (tab) {
        localStorage.tabToReload = tab.id;
        chrome.runtime.reload();
    });
    
    function reloadTab() {
        var tabID = localStorage.tabToReload;
        if (tabID) {
            chrome.tabs.reload(parseInt(tabID));
            delete(localStorage.tabToReload);
        }
    }
    reloadTab();
    ...
    
    ...
    #reload-btn { position: fixed; top: 0; right: 0; } /* or any other position on the page */
    ...
    
    ...
    $("body").prepend("<button id='reload-btn'>reload extension + page reload</button>"); // some shortcut key can be additionally assigned to this button
    
    $("#reload-btn").on("click", function() { 
        chrome.runtime.sendMessage("please, reload me");
    });
    ...
    
    ...
    chrome.runtime.onMessage.addListener(
        function(message, sender) {
            if (message == "please, reload me"){
                localStorage.tabToReload = sender.tab.id;
                chrome.runtime.reload();
        }
    });
    
    function reloadTab() {
        var tabID = localStorage.tabToReload;
        if (tabID) {
            chrome.tabs.reload(parseInt(tabID));
            delete(localStorage.tabToReload);
        }
    }
    
    reloadTab();
    ...
    

    关于如何自动重新加载过程,请参见。

    稍微修改了上述内容,以调用重新加载扩展,然后重新加载正在执行内容脚本(userscript.js)的选项卡,所有操作都由“重新加载btn按钮触发(如果浏览器操作图标被popup.html占据)

    manifest.json

    ...
    "browser_action": {
        "default_title": "Reload"
    //    "default_icon": {
    //        "19": "img/icon19.png",
    //        "38": "img/icon38.png"
    //    },
    },
    ...
    
    ...
    "background":{ "scripts": ["background.js"]},
    
    "content_scripts" : [{
            "matches" : ["https://stackoverflow.com/*"],
            "css": ["userscript.css"],          
            "js": ["jquery-latest.min.js", "userscript.js"],
            "run_at":"document_end"  
    }], 
    
    "web_accessible_resources": ["jquery-latest.min.map"],
    
    "permissions": ["tabs"], 
    
    "browser_action": {
        "default_icon": "icon19.png",
        "default_title": "My Extension Title",
        "default_popup": "popup.html"
    }
    ...
    
    userscript.css

    chrome.browserAction.onClicked.addListener(function (tab) {
        localStorage.tabToReload = tab.id;
        chrome.runtime.reload();
    });
    
    function reloadTab() {
        var tabID = localStorage.tabToReload;
        if (tabID) {
            chrome.tabs.reload(parseInt(tabID));
            delete(localStorage.tabToReload);
        }
    }
    reloadTab();
    ...
    
    ...
    #reload-btn { position: fixed; top: 0; right: 0; } /* or any other position on the page */
    ...
    
    ...
    $("body").prepend("<button id='reload-btn'>reload extension + page reload</button>"); // some shortcut key can be additionally assigned to this button
    
    $("#reload-btn").on("click", function() { 
        chrome.runtime.sendMessage("please, reload me");
    });
    ...
    
    ...
    chrome.runtime.onMessage.addListener(
        function(message, sender) {
            if (message == "please, reload me"){
                localStorage.tabToReload = sender.tab.id;
                chrome.runtime.reload();
        }
    });
    
    function reloadTab() {
        var tabID = localStorage.tabToReload;
        if (tabID) {
            chrome.tabs.reload(parseInt(tabID));
            delete(localStorage.tabToReload);
        }
    }
    
    reloadTab();
    ...
    
    userscript.js

    chrome.browserAction.onClicked.addListener(function (tab) {
        localStorage.tabToReload = tab.id;
        chrome.runtime.reload();
    });
    
    function reloadTab() {
        var tabID = localStorage.tabToReload;
        if (tabID) {
            chrome.tabs.reload(parseInt(tabID));
            delete(localStorage.tabToReload);
        }
    }
    reloadTab();
    ...
    
    ...
    #reload-btn { position: fixed; top: 0; right: 0; } /* or any other position on the page */
    ...
    
    ...
    $("body").prepend("<button id='reload-btn'>reload extension + page reload</button>"); // some shortcut key can be additionally assigned to this button
    
    $("#reload-btn").on("click", function() { 
        chrome.runtime.sendMessage("please, reload me");
    });
    ...
    
    ...
    chrome.runtime.onMessage.addListener(
        function(message, sender) {
            if (message == "please, reload me"){
                localStorage.tabToReload = sender.tab.id;
                chrome.runtime.reload();
        }
    });
    
    function reloadTab() {
        var tabID = localStorage.tabToReload;
        if (tabID) {
            chrome.tabs.reload(parseInt(tabID));
            delete(localStorage.tabToReload);
        }
    }
    
    reloadTab();
    ...
    

    可能的重复我不认为这是一个多大的重复:这是一个关于重新加载扩展与活动标签。另一个是关于“保存时”自动重新加载扩展。此外,对这个问题应用公认的答案意味着重新加载所有未打包的扩展,并需要额外的“单击”来重新加载活动页面。