【发布时间】:2020-03-13 16:52:56
【问题描述】:
在 Chrome 中,可以在安装扩展程序后运行内容脚本,也就是说,下面的代码有效,并且在安装后所有打开的选项卡的控制台日志中都会显示“内容脚本”字样。
但是,在 Edge 中,这不起作用。这似乎是Edge中的一个错误。 任何想法如何解决,以便在所有选项卡中的扩展安装后执行 content-script.js?
背景.js
browser.runtime.onInstalled.addListener(function(details) {
var scripts = browser.runtime.getManifest().content_scripts[0].js;
browser.tabs.query({}, function(tabs) {
tabs.forEach(function(tab){
for(var k=0; k<scripts.length; k++) {
browser.tabs.executeScript(tab.id, {
file: scripts[k]
});
}
});
});
});
内容脚本.js
console.log("content script");
【问题讨论】:
-
如果您使用持久性后台脚本,您可以简单地在开始时通过向任何匹配的选项卡发送测试消息来执行检查(您的内容脚本会以“ok”或
true之类的内容进行响应)因此,如果没有响应,请继续重新注入。对于非持久性脚本,您可以使用任何其他事件并执行相同的检查。 -
这不是检查内容脚本是否处于活动状态,在 Edge 中(重新)注入根本不起作用。
-
FWIW executeScript 在当前基于 Chromium 的 Edge 中为我工作。您是否调试了代码以查看它在哪一点失败?是 onInstalled 本身、query() 还是 executeScript?
-
executeScript 在一般工作中,但不是在 onInstalled 的上下文中。似乎调用了executeScript(查询有效,for循环运行,没有错误信息),但没有效果。
-
我明白了。尝试添加
runAt: 'document_start',因为它可能认为标签仍在加载。
标签: google-chrome-extension microsoft-edge microsoft-edge-extension