javascript - Chrome API 的 onBeforeRedirect 无法正常工作?

标签 javascript google-chrome redirect google-chrome-extension webrequest

我正在开发一个 Google Chrome 扩展程序,我需要检测重定向,以便我可以执行某个操作(该操作无关紧要,这个问题仅与重定向有关)。到目前为止,我的background.js中有这段代码:

chrome.webRequest.onBeforeRedirect.addListener(function (url, tabId) {
    console.log("This is a redirect");
    chrome.tabs.sendMessage(tabId, {"message": url}, function(response){});
}, {urls: ["<all_urls>"]});

但是,console.logsendMessage 方法都没有被调用。我尝试访问 wikipedia.com、google.net 和其他几个我知道会重定向用户的网站。为什么扩展程序没有选择这个?

(是的,我已将“webRequest”放入我的 manifest.json 文件下的权限中。)

提前致谢,如果您需要任何其他代码,请告诉我。

编辑:感谢@ze,它现在可以工作了,但是现在它工作得有点了。换句话说,它现在开始在每个页面多次触发,当我开始在 Chrome 搜索栏中输入重定向站点的 URL 时,它也会向我提供重定向消息。当我实际按下回车键导航到重定向站点时(而不是在我仍在打字时),如何才能让它触发一次?这是新代码:

chrome.webRequest.onBeforeRedirect.addListener(function (details) {
    if(details.frameId === 0){
        alert("This is a redirect.");      
        // chrome.tabs.sendMessage(details.tabId, {"message": details.url}, function(response){});
    }
}, {urls: ["<all_urls>"]});

最佳答案

据我所知, onBeforeRedirect 的回调有两个参数,而 here表示回调应该有一个参数:details 。然后使用 details.url 访问 url 和 tabId (或者 details.redirectUrl 如果您需要新的 URL)和 details.tabId 。 此外,选项卡内的框架也可能会重定向,因此该事件可能会多次触发。如果代码仅在主框架重定向时才运行,则应添加如下检查:

if (details.frameId == 0){
      //Your code here
}

另外,我不知道为什么你有 {urls: ["<all_urls>"]}addListener 的参数中功能。唯一的参数是回调。 所以,我会写这样的内容:

chrome.webRequest.onBeforeRedirect.addListener(function (details) {
  if(details.frameId == 0){        
     console.log("This is a redirect");
     chrome.tabs.sendMessage(details.tabId, {"message": details.url}, function(response){});
  }
});

请告诉我这是否有效。

关于javascript - Chrome API 的 onBeforeRedirect 无法正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38062428/

相关文章:

regex - 将 http 重定向到 https OS X Server 5.0.15

javascript - 由于模块的 js 文件中的 "Import",ts-jest 无法运行 tsx 测试文件

javascript - 如何在 'value' 输入之前修改 VueJS 中的 `$emit(' prop')`完成更新

Javascript 用 jQuery 函数替换函数

javascript - 我可以运行脚本/扩展来阻止/隐藏 Chrome 页面上的特定内容吗?

ruby-on-rails-4 - 设计错误:I18n::MissingInterpolationArgument at/users/sign_in 用户名和密码无效

javascript - 从嵌套的 json 值对象获取数组

javascript - 大型阵列上的 Node console.log 显示 "... 86 more items"

javascript - Chrome 控制台错误 : The Content Security Policy was delivered in report-only mode, 但未指定 'report-uri'

python - Django 表单向导重定向