如何解决Chrome WebRequest onBeforeRequest在收到函数返回后将不会重定向
所以基本上我正在制作某种网络钓鱼网站检测器。
我的程序要做的是:
- 将URL发送到本地主机上的Flask后端
- 等待后端处理URL(我必须使XHR同步,否则它将在接收结果之前重定向)
- 后端将结果(0 =合法,1 =虚假)发送回扩展
- 扩展名根据结果重定向。如果为0,则重定向回URL。如果为1,则重定向到本地页面
blocked.html
问题出在重定向上。无论结果如何,它都会重定向回URL。
代码:
manifest.json
{
"manifest_version": 2,"name": "Phishing Site Detector","version": "1.0","browser_action": {
"default_icon": "icon.png"
},"background": {
"scripts": ["background.js"],"persistent": true
},"web_accessible_resources": [
"blocked.html"
],"permissions": [
"webRequest","webRequestBlocking","<all_urls>"
]
}
background.js
function checkurl(url){
console.log("checking URL..");
console.log(url);
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function (){
if (xhr.readyState == 4) {
console.log("response received!");
console.log(xhr.responseText);
return xhr.responseText;
}
};
xhr.open("GET","http://localhost:5000/"+url,false);
xhr.send();
};
chrome.webRequest.onBeforeRequest.addListener(
function(details){
var res = checkurl(details.url);
if(res == "0"){
console.log("redirecting back..");
return { redirectUrl: details.url };
}else if(res == "1"){
console.log("blocked!");
return { redirectUrl: "chrome-extension://njfcgcmoahjhhbggmapgphfapmedmjhj/blocked.html" };
}
},{
urls: ["http://*/*","https://*/*"],types: ["main_frame"]
},["blocking"]
);
谢谢。
解决方法
onBeforeRequest在chrome扩展中不能异步,因此您的代码几乎在那儿,但是当使用已弃用的同步XHR时,其send
等待响应,因此您无需访问xhr.onreadystatechange事件就可以直接访问响应离开:
function checkurl(url) {
var xhr = new XMLHttpRequest();
xhr.open('GET','http://localhost:5000/' + url,false); // synchronous
xhr.send();
return xhr.responseText;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。