我想在资源(例如 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 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/