【发布时间】:2021-02-08 15:28:43
【问题描述】:
我正在构建一个 chrome 扩展,它需要重定向某个页面的脚本。我的 background.js 包括:
chrome.webRequest.onBeforeRequest.addListener(
function(details) {
if (/js\example.js/.test(details.url))
// setTimeout(requestScript(details), 0);
return {
redirectUrl: chrome.extension.getURL("novoScript.js")
}
},
{urls: ['*://*.example.com/*.js']},
["blocking"]
);
manifest.json 包括:
"background": {
"scripts": ["background.js"],
"persistent": true
},
它按预期工作,但该功能仅在我单击弹出按钮后重新加载页面时运行。我第一次在新选项卡中打开页面时,它没有运行。如果我在页面中,并且单击了弹出按钮,它总是有效的。如果我没有点击,无论我重新加载多少次,重定向都不起作用。
我已经尝试擦除 popup.js 的全部内容,但没有任何影响,所以不是因为那里有任何代码。
另外,我已经检查过 background.js 文件没有再次运行,所以似乎监听器在那里,但是如果我不点击弹出按钮,它就不会监听。我还在监听函数中添加了 console.log,在我点击按钮之前,它只记录对 'aobut:blank' url 的调用。
我想让侦听器在不点击弹出窗口的情况下工作,以避免不一致。任何帮助表示赞赏。
【问题讨论】:
-
您是否在 chrome://extensions 页面上重新加载了扩展程序?您描述的行为听起来像是 Chrome 中的错误,或者您未显示的代码中存在其他错误。 FWIW 你可以改用declarativeNetRequest。
-
是的,我正在重新加载。感谢您对“declarativeNetRequest”的指导,它正在工作,并且总体上是解决问题的更好方法。我将用这种方法写一个答案,将其标记为已接受。谢谢。
-
每当服务人员处于非活动状态时,我也会遇到此问题,正如您所描述的,在您单击图标之前,它最初是不活动的。
webRequest事件仅在服务工作人员处于活动状态时触发,但服务工作人员只有在事件唤醒时才会激活。这是什么逻辑啊,mv3 已经超越了bug,bug 报告还不如做背景装饰。
标签: javascript google-chrome redirect google-chrome-extension webrequest