Javascript Chrome Extension OnBeforeRequest不会触发,除非我单击poupup按钮

Javascript Chrome Extension OnBeforeRequest不会触发,除非我单击poupup按钮,javascript,google-chrome,redirect,google-chrome-extension,webrequest,Javascript,Google Chrome,Redirect,Google Chrome Extension,Webrequest,我正在构建一个chrome扩展,它需要重定向某个页面的脚本。My background.js包括: chrome.webRequest.onBeforeRequest.addListener( function(details) { if (/js\example.js/.test(details.url)) // setTimeout(requestScript(details), 0);

我正在构建一个chrome扩展,它需要重定向某个页面的脚本。My 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"]
    );
"background": {
    "scripts": ["background.js"],
    "persistent": true
},
manifest.json包括:

    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"]
    );
"background": {
    "scripts": ["background.js"],
    "persistent": true
},
它按预期工作,但该功能仅在单击弹出按钮后重新加载页面时运行。第一次在新选项卡中打开页面时,它不会运行。如果我在页面中,并单击了弹出按钮,则它始终有效。如果我没有点击,无论我重新加载多少次,重定向都不起作用

我尝试过删除popup.js的全部内容,但这并没有什么区别,所以这不是因为那里有任何代码

另外,我已经检查过background.js文件不会再次运行,因此侦听器似乎在那里,但如果我不单击弹出按钮,它就不会侦听。我还向侦听器函数添加了console.log,在单击按钮之前,它只记录对“aobut:blank”url的调用


我希望允许侦听器在不单击弹出窗口的情况下工作,以避免不一致。非常感谢您的帮助。

如果您第一次打开页面时我理解正确,则在请求之前不会触发。当您以另一种方式触发页面加载时,它会按预期在请求之前触发

您可以使用onBeforeNavigateonBeforeRequest来捕获所需内容

捕获任何选项卡更改的一种完全可靠的方法是在后台脚本中执行以下操作:

chrome.tabs.onUpdated.addListener(function
  (tabId, changeInfo, tab) {
    // read changeInfo data and do something with it (like read the url)
    if (changeInfo.url && ..url-comparison-here) {
      // do something here

    }
  }
);

我不确定是什么导致了这个问题。但@wOxxOm指出了一种总体上似乎更好的替代方法。有了它,无论何时请求所需的资源,我都应用了一个通用规则

实施: manifest.json: redirectRules.json:
你把分机重新装上了吗chrome://extensions 页您描述的行为听起来像是Chrome中的一个bug,或者您没有显示的代码中有其他错误。FWIW您可以切换到。是的,我正在重新加载。感谢您对“declarativeNetRequest”的指导,它正在发挥作用,总体而言,这是解决问题的更好方法。我将用这种方法写一个答案,将其标记为已接受。谢谢。“当你以另一种方式触发页面加载”我不确定我是否理解这部分。我认为这与页面加载无关,因为只有当我点击弹出窗口时,它才会工作,而不是当我重新加载时。我以前尝试过onUpdate方法,但无法使其工作,因为我无法找到在changeInfo不包含url时获取url的同步方法。但我还是用DeclarativeNet请求让它工作了。谢谢你抽出时间。