Chrome API的onBeforeRedirect无法正常工作?

时间:2016-06-27 20:11:16

标签: 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以及其他一些我知道重定向用户的网站。为什么扩展无法解决这个问题?

(是的,我已将&#34; webRequest&#34;放在我的manifest.json文件下的权限中。)

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

编辑:感谢@ze现在正在工作,但是现在它已经很好地工作了。换句话说,它现在每页开始多次启动,当我开始在Chrome搜索栏中键入重定向站点的URL时,它也会给我重定向消息。当我实际按下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>"]});

1 个答案:

答案 0 :(得分:2)

从我可以看到,onBeforeRedirect的回调有两个参数,而here表示回调应该有一个参数:$pdf = $client->convertFile("/path/to/MyLayout.html"); 。然后,您可以使用details(或details.url,如果您需要新网址)和details.redirectUrl访问网址和tabId。 此外,选项卡内的框架也可能会重定向,因此事件可能会多次触发。如果代码必须仅在主框架重定向时运行,则应添加如下的检查:

details.tabId

另外,我不确定你为什么在if (details.frameId == 0){ //Your code here } 函数的参数中有{urls: ["<all_urls>"]}。唯一的争论是回调。 所以,我会写一些类似的东西:

addListener

让我知道这是否成功。