繁体   English   中英

Chrome API的onBeforeRedirect无法正常工作?

[英]Chrome API's onBeforeRedirect not working properly?

我正在开发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搜索栏中输入重定向站点的网址时,它也为我提供了重定向消息。 当我实际按Enter键导航到重定向站点时(而不是在我仍在键入时),如何只触发一次? 这是新的代码:

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回调有两个参数,而这里说回调应有一个参数: details 然后,您访问的网址和tabId使用details.url (或details.redirectUrl如果你需要新的URL)和details.tabId 此外,标签内的框架也可能会重定向,因此事件可能会触发多次。 如果代码仅在主机重定向时才必须运行,则应添加如下检查:

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

另外,我不确定为什么在addListener函数的参数中有{urls: ["<all_urls>"]} 唯一的参数是回调。 所以,我会写类似:

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){});
  }
});

让我知道是否可行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM