重新加载Chrome扩展程序内容脚本执行环境

Jai*_*spy 9 javascript google-chrome-extension

我想模仿它的效果window.location.reload(),但仅限于运行我的内容脚本的"孤立世界".也就是说,删除所有现有的JS,特别是回调和事件绑定.有一个很好的方法来做到这一点?

注意:chrome.runtime.reload()不起作用; 它具有重新加载扩展和后台脚本的效果,但在用户刷新之前不会重新加载现有的内容脚本.

Mét*_*ule 6

据我所知,没有自动重新注入内容脚本的方法,例如在扩展更新期间。您可以做的是找到所有 url 与您需要的模式匹配的选项卡,并以编程方式使用chrome.tabs.executeScript.

请注意,此方法需要为与内容脚本使用的 URL 模式相同的 URL 模式添加权限。

清单.json:

"content_scripts":    
[
    {
        "matches": [ "http://*.google.com/*" ],
        "js": [ "content_script.js" ]
    }
], 
"permissions":        
[ 
    "tabs", "http://*.google.com/*"
]
Run Code Online (Sandbox Code Playgroud)

背景.js:

chrome.runtime.reload();
chrome.tabs.query({ url: "http://*.google.com/*" }, function(tabs)
{
    for(var i = 0; i < tabs.length; i++)
    {
        chrome.tabs.executeScript(tabs[i].id, { file: "content_script.js" }, function() {});
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 问题是这使现有的上下文保持不变。如果我在一个 executeScript 中启动 setInterval,它仍会在下一个 executeScript 之后运行。 (2认同)