I want to convert a Chrome extension of mine to Firefox. So far so good, except I had an url redirect in webRequest.onBeforeRequest
in the Chrome extension, which is not allowed in Firefox WebExtensions.
Now I am unsure how to implement this in Firefox.
In the Chrome background.js
it looked something like this:
chrome.webRequest.onBeforeRequest.addListener(
function(details) {
console.log('onBeforeRequest');
var returnuri;
returnuri = details.url;
if ((details.url.indexOf("/malicious/") > -1) || (details.url.indexOf("/bad/") > -1)){
//I want to redirect to safe content
returnuri = details.url + (/\&tag=/.test(details.url) ? "" : '/safe/');
}else{
returnuri = details.url;
}
return {redirectUrl: returnuri};
},
{
urls: [
"*://malicious.com/*"
],
types: ["main_frame"]
},
["blocking"]
);
答案 0 :(得分:3)
请求可以是:
- 仅在
取消onBeforeRequest
- 仅在
中修改/重定向onBeforeSendHeaders
...
onBeforeRequest
或onHeadersReceived
不允许重定向,但onBeforeSendHeaders
允许重定向。
嗯,这很好地解释了情况。您的选择是:
webRequest
的更好支持。编辑(2018年12月):现在确实可以。引用the documentation:
在其中一些事件中,您可以修改请求。具体来说,您可以:
- 取消请求:
onBeforeRequest
onBeforeSendHeaders
onAuthRequired
- 将请求重定向到:
onBeforeRequest
onHeadersReceived
[...]
取消,而不是重定向请求,如果完全没有连接就绝对必要。
重新定位onBeforeSendHeaders
。考虑到您只检查URL以及该事件中可用的URL,除了在重定向之前已经建立TCP连接之外,它不应该有所不同。
请注意,相同的代码在Chrome中不起作用 - 它不会期望在此请求中进行重定向。
正如您所提到的,与Chrome不同,重定向到相同的网址会产生循环(因为此时请求需要从头开始重新制作)。
通常,如果您需要检查先前事件中可用的内容并在以后对其执行操作,则可以通过保存不幸的是,文档声明也不支持onBeforeRequest
并稍后重定向该请求来标记requestId
中的请求onBeforeSendHeaders
中的请求ID。requestId
。