如何在加载到 Webextensions 之前根据内容阻止资源?
How to block resources based on their content before they are loaded in 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 说:
- 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()}; ,但没有异步回调。我没有选择 "return" 结果取消 JSON.
在其他 Whosebug 问题中,我读到了 nsIContentPolicy,它是
的一部分
XPCOM。我没有找到关于如何在 Firefox Webextension 环境中使用它的提示、示例或描述。这可能吗?如果是,怎么做?
如果这两件事都不可能,我该如何做这样的扩展?我是否必须在没有 Webextension 的情况下使用已弃用的 XPCOM?
看起来 requestBody
将登陆即将推出的 Firefox 版本(目前似乎是 50):bugzilla.mozilla.org/show_bug.cgi?id=1201979。也就是说,您现在可以在 Beta 中进行测试,因为 49 已于本周发布。
我想在资源(如 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()}; ,但没有异步回调。我没有选择 "return" 结果取消 JSON.
在其他 Whosebug 问题中,我读到了 nsIContentPolicy,它是
的一部分
XPCOM。我没有找到关于如何在 Firefox Webextension 环境中使用它的提示、示例或描述。这可能吗?如果是,怎么做?
如果这两件事都不可能,我该如何做这样的扩展?我是否必须在没有 Webextension 的情况下使用已弃用的 XPCOM?
看起来 requestBody
将登陆即将推出的 Firefox 版本(目前似乎是 50):bugzilla.mozilla.org/show_bug.cgi?id=1201979。也就是说,您现在可以在 Beta 中进行测试,因为 49 已于本周发布。