chrome.webRequest.onBeforeRedirect没有停止重定向?

时间:2016-07-08 15:24:57

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

我正在开发一个chrome扩展,在部分扩展中,我需要检测重定向并询问用户他/她是否希望继续。我尝试使用chrome的webRequest API执行此操作,但它似乎无法正常工作,即使我确定我的语法是正确的。以下是相关代码:

chrome.webRequest.onBeforeRedirect.addListener(function (details) {
    if(details.frameId == 0){
        if (confirm("This link is a redirect. Do you want to continue?")){
            /* do nothing and let them redirect */
        }
        else {
            /* stop the redirect from happening */
            return {cancel: true};
        }
    }
}, {urls: ["<all_urls>"], types: ["main_frame"]}, ["blocking"]);

为什么该方法无法正常阻止?

2 个答案:

答案 0 :(得分:3)

根据official guide,您不能取消重定向

  

onBeforeRedirect

     

即将执行重定向时触发。重定向可以由HTTP响应代码或扩展名触发。此事件是信息性的并且是异步处理的。 它不允许您修改或取消请求。

答案 1 :(得分:1)

Haibara完全正确,onBeforeRedirect纯粹是信息性的,但让我补充一点。

onBeforeRequestonBeforeSendHeaders是唯一可以发生的事件 - 即取消只有在实际发出请求之前才可能。这是一个定义&#34;取消&#34;的问题,因为请求已经出来了。

请注意,您可以将onHeadersReceived用于您的目的 - 该事件中提供的标头是用于重定向请求的标头,您可以通过重定向(在此时允许)到您自己的扩展名来覆盖它页。

但是,我还必须说你可能在这里追逐错误的嫌疑人。据我所知webRequest,这只会抓住HTTP 3** redirects;任何其他重定向方法(例如更改window.location)都意味着此特定网络请求成功,然后生成后续导航,该导航对webRequest透明。

HTTP 3 **重定向最常用于将http重写为https或将URL修改为规范的良性目的。

相关问题