0

我想在资源完全加载之前阻止资源(如 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 不支持“requestBody”选项。

哦,糟糕的故事,不酷。所以我需要一个异步 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) { [...] }

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

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

如果这两件事都不可能,我怎么能做这样的扩展?我必须在没有 Webextension 的情况下使用已弃用的 XPCOM 吗?

4

1 回答 1

1

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

于 2016-09-22T20:12:24.073 回答