javascript - 在将资源加载到 Webextensions 中之前,如何根据内容阻止资源?

标签 javascript asynchronous google-chrome-extension xpcom firefox-addon-webextensions

我想在资源(例如 JavaScript 或 CSS 文件)完全加载之前对其进行阻止。资源是否被阻止的情况取决于其内容。实际上,没有解决方案可以做到这一点,或者?

我所知道的: Webextensions 与 Chrome 扩展类似,因此它们也有 webRequest.onBeforeRequest 监听器。监听器允许阻止文件:

function cancel(requestDetails) {
  console.log("Canceling: " + requestDetails.url);
  return {cancel: true};
}

chrome.webRequest.onBeforeRequest.addListener(
  cancel,
  {urls: ["<all_urls>"], types: ["script"]},
  ["blocking"]
);

到目前为止,一切都很好。还应该有 requestBody 选项,这样我就可以根据文件的内容做出决定。但是Mozilla Doc说:

  1. Firefox does not support the "requestBody" option.

噢,故事很糟糕,一点也不酷。所以我需要一个异步 XHR 请求来获取 URL 数据:

function cancel(requestDetails) {
   return {cancel: getUrlContent(requestDetails.url, function(result) {
      if(condition) { console.log(true); } else { console.log(false); }
   })};
}

// asynchron XHR request
function getUrlContent(url, callback) { [...] }

=> 这不起作用。 return {cancel: X}; 接受普通函数,例如return {cancel: doSth()};,但不接受异步回调。我无法选择将结果“返回”到取消 JSON。

在其他 stackoverflow 问题中,我读到了 nsIContentPolicy ,这是
的一部分 XPCOM。我没有找到提示、示例或描述,说明如何在 Firefox Webextension 环境中使用它。这可能吗?如果是,怎么做?

如果这两件事都不可能,我该如何进行这样的扩展?我是否必须使用不带 Webextension 的已弃用 XPCOM?

最佳答案

看起来 requestBody 将登陆即将推出的 Firefox 版本(目前似乎是 50):bugzilla.mozilla.org/show_bug.cgi?id=1201979 。也就是说,你现在可以在 Beta 版中进行测试了,因为 49 已于本周发布。

关于javascript - 在将资源加载到 Webextensions 中之前,如何根据内容阻止资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37504827/

相关文章:

json - 如何运行react(使用webpack)作为chrome扩展

javascript - 在方法中应用媒体查询?

javascript - 根据选择选项更新多个单选按钮

javascript - 删除 JavaScript 中动态创建的行

javascript - 绕过 Node 的异步特性

javascript - 使用 chrome 扩展检查 javascript 库是否存在

javascript - Canvas 元素中的字母间距

javascript - 等待 Javascript 中的异步调用

c# - Lambda 表达式 where 子句中的异步等待

json - 添加键盘快捷键以执行 Chrome 扩展