gpt4 book ai didi

javascript - 如何让 chrome.webRequest 等待 XMLHttpRequest(); 的结果

转载 作者:行者123 更新时间:2023-12-05 07:36:20 26 4
gpt4 key购买 nike

我正在开发一个 Chrome 扩展程序,我想在其中阻止基于外部查找的页面加载(例如,根据用户在输入栏中输入的 URL 检查垃圾邮件评级或其他服务)。

在 Chrome 开发者文档中,他们提供了 following basic example for blocking :

chrome.webRequest.onBeforeRequest.addListener(
function(details) { return {cancel: true}; },
{urls: ["*://www.evil.com/*"]},
["blocking"]);

我遇到的问题是试图找出使用回调、 promise 或异步/等待的正确方法,以便我可以确定是否要返回 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};
}

在我的真实函数中,我尝试对包装的 promise 的结果使用 await XMLHttpRequest()。在此之前,我尝试通过将最后一个参数设置为 false 来在调用 XMLHttpRequest().open() 时使其同步。这会导致同步执行,但其已弃用的功能会导致一些其他奇怪的问题,导致 ,send() 因错误而失败。因此,我想避免强制 .open() 同步。

我还尝试将 async 关键字放在 chrome.webRequest.onBeforeRequest... 之前,但这也不起作用。


如何确保我强制 Chrome 插件等到我调用远程服务并在它执行之前做出决定。由于这是阻塞加载,所以它实际上应该都是同步逻辑,或者至少在做出阻塞决定之前等待。

最佳答案

暂不支持异步。

一个折衷方案是对要修改的内容进行缓存。

关于javascript - 如何让 chrome.webRequest 等待 XMLHttpRequest(); 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49183132/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com