繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM