[英]How to make chrome.webRequest wait for results of XMLHttpRequest();
我正在开发一个 Chrome 扩展程序,我想根据外部查找阻止页面加载(例如,根据用户在输入栏中输入的 URL 检查垃圾邮件评级或其他服务)。
在 Chrome 开发者文档中,他们提供了以下基本的阻止示例:
chrome.webRequest.onBeforeRequest.addListener(
function(details) { return {cancel: true}; },
{urls: ["*://www.evil.com/*"]},
["blocking"]);
我遇到的问题是试图找出使用回调、承诺或异步/等待的正确方法,以便我可以确定是否要返回 true 并阻止网页加载。
例如,这将起作用:
function returnTrue(){
return {cancel: true};
}
chrome.webRequest.onBeforeRequest.addListener(
returnTrue,
{
urls: ["<all_urls>"],
types: ["main_frame"]
},
["blocking"]);
但是如果我使returnTrue()
异步,则侦听器不再阻塞,并且页面加载。 例如,
async function returnTrue(){
return {cancel: true};
}
在我的实际功能中,我尝试对包装XMLHttpRequest()
的承诺的结果使用 await 。 在此之前,我尝试在调用XMLHttpRequest().open()
时通过将最后一个参数设置为 false 使其同步。 这会导致同步执行,但其已弃用的功能会导致一些其他奇怪的问题,导致 send() 失败并出现错误。 因此,我想避免强制.open()
同步。
我还尝试将async
关键字放在chrome.webRequest.onBeforeRequest...
但这也不起作用。
我怎样才能确保我强制 Chrome 插件等到我调用远程服务并在它执行之前做出决定。 因为这是阻塞加载,所以它真的应该都是同步逻辑或者至少在做出阻塞决定之前等待。
尚不支持异步。
一种折衷方案是对要修改的内容进行缓存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.