我想在资源完全加载之前阻止资源(如 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说:
- 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 吗?