[英]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
纯粹是信息性的,但让我补充一下。
onBeforeRequest
和onBeforeSendHeaders
是唯一可以进行的事件-即只有在实际发出请求之前才可以取消 。 这是定义“取消”的问题,因为请求已经发出。
请注意,您可以将onHeadersReceived
用于您的目的-该事件中提供的标头是用于重定向请求的标头,并且可以通过重定向(此时允许)到自己的扩展页来覆盖它。
但是,我还必须说,您可能在这里追逐了错误的嫌疑人。 据我了解webRequest
,这只会捕获HTTP 3 **重定向 ; 任何其他重定向方法(例如更改window.location
)都将意味着此特定网络请求成功,然后生成后续导航,这对于webRequest
是透明的。
一直以来,HTTP 3 **重定向通常用于将http重写为https或将URL修改为规范URL的良性目的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.