下面是我代码,它调用一个函数,使用browser.webRequest.onBeforeRequest重定向页面
browser.webRequest.onBeforeRequest.addListener(
redirect,
{
urls: ["<all_urls>"],
types: ["main_frame"],
},
["blocking"]
);
和重定向功能:
function redirect(requestDetails){
let redirection_url = "https://google.com/";
let type = requestDetails.type;
let url = requestDetails.url;
var checkurl = ""
var final_url = '';
if(url.includes("http://")){
checkurl = url.split('http://')[1]
final_url = 'https://'+checkurl;
}else if(url.includes("https://")){
final_url = url;
}else{
final_url = 'https://'+url;
}
var xhttp = new XMLHttpRequest();
xhttp.open("GET", final_url, true);
xhttp.send();
return xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
return {
cancel:true,
};
}else if(this.status == 0 && this.readyState == 4){
return {
redirectUrl: redirection_url,
};
}
};
}
我返回redirectUrl或cancel取决于URL是否在https上工作。如果网站上没有https,那么我想重定向到google.com,响应和代码都很好,但是响应中有一些延迟,所以侦听器在获得响应后不会重定向。
侦听器处于阻塞状态,但仍然无法工作,我在上找到了此答案
stackoverflow
我正在返回readystatechange,但它仍然不工作,真的很感谢你的帮助。谢谢
1条答案
按热度按时间vbkedwbf1#
答案很简单,我们必须返回一个promise,所以我们有一个阻塞行为,直到我们从promise得到一个值。