繁体   English   中英

chrome.webRequest.onBeforeRedirect不停止重定向?

[英]chrome.webRequest.onBeforeRedirect not stopping redirect?

我正在开发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"]);

为什么方法不能正确阻塞?

根据官方指南 ,您不能取消重定向

onBeforeRedirect

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

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

onBeforeRequestonBeforeSendHeaders是唯一可以进行的事件-即只有在实际发出请求之前才可以取消 这是定义“取消”的问题,因为请求已经发出。


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


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

一直以来,HTTP 3 **重定向通常用于将http重写为https或将URL修改为规范URL的良性目的。

暂无
暂无

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

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