Mozilla 插件加载太晚无法阻止资源
Mozilla addon loading too late to block a resource
我正在尝试取消从 studio.code.org 到 www.google.com/jsapi 的请求,以帮助加快页面加载速度。在我的语言环境中,google 被阻止,但浏览器在放弃之前等待 75 秒。我想通过阻止请求来防止延迟(并且页面似乎在没有 jsapi 的情况下工作正常)。
我按照 https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/onBeforeRequest 中的示例安装了插件。我包含了一个 console.log 语句来查看我的代码被调用,但它仅在浏览器等待另外 75 秒尝试加载我希望阻止的资源后才会显示。
如果这行不通,我愿意接受其他方法。
manifest.json:
{
"manifest_version": 2,
"name": "cancel-google",
"version": "1.0",
"permissions": [
"webRequest",
"webRequestBlocking"
],
"content_scripts": [
{
"matches": ["https://studio.code.org/*"],
"js": ["cancel-google.js"]
}
]
}
取消-google.js:
// match pattern for the URLs to block
var pattern = "*www.google.com/jsapi";
console.log("cancelator script loaded");
// cancel function returns an object
// which contains a property `cancel` set to `true`
function cancel(requestDetails) {
console.log("Cancelling: " + requestDetails.url);
return {cancel: true};
}
// add the listener,
// passing the filter argument and "blocking"
browser.webRequest.onBeforeRequest.addListener(
cancel,
{urls: [pattern]},
["blocking"]
);
取消-google.js 应该作为后台脚本加载,这对于大多数 WebExtension API 都是正确的。
{
"name": "Your Addon",
"manifest_version": 2,
"background": {
"scripts": ["cancel-google.js"]
}
}
那么应该可以了。
Smile4ever 的答案是正确的,但我发现我的原始代码存在一些其他问题。
首先 - 我的原始内容脚本的 'timing' 期是一个转移注意力的问题。原来的content script虽然会写入页面的log,但是对加载资源没有影响。相同的脚本,作为后台脚本,不会将任何内容(我注意到)写入控制台日志,但它会起作用。
其次 - 后台脚本需要比我原来更多的权限(比 mozilla.org link 中描述的更多)。
"permissions": [
"http://*/*",
"https://*/*",
"webRequest",
"webRequestBlocking" ]
以上权限为adequate/excessive;您还可以将 "http(s)://*/*"
替换为请求资源和要阻止的资源的页面的实际 url。
我正在尝试取消从 studio.code.org 到 www.google.com/jsapi 的请求,以帮助加快页面加载速度。在我的语言环境中,google 被阻止,但浏览器在放弃之前等待 75 秒。我想通过阻止请求来防止延迟(并且页面似乎在没有 jsapi 的情况下工作正常)。
我按照 https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/onBeforeRequest 中的示例安装了插件。我包含了一个 console.log 语句来查看我的代码被调用,但它仅在浏览器等待另外 75 秒尝试加载我希望阻止的资源后才会显示。
如果这行不通,我愿意接受其他方法。
manifest.json:
{
"manifest_version": 2,
"name": "cancel-google",
"version": "1.0",
"permissions": [
"webRequest",
"webRequestBlocking"
],
"content_scripts": [
{
"matches": ["https://studio.code.org/*"],
"js": ["cancel-google.js"]
}
]
}
取消-google.js:
// match pattern for the URLs to block
var pattern = "*www.google.com/jsapi";
console.log("cancelator script loaded");
// cancel function returns an object
// which contains a property `cancel` set to `true`
function cancel(requestDetails) {
console.log("Cancelling: " + requestDetails.url);
return {cancel: true};
}
// add the listener,
// passing the filter argument and "blocking"
browser.webRequest.onBeforeRequest.addListener(
cancel,
{urls: [pattern]},
["blocking"]
);
取消-google.js 应该作为后台脚本加载,这对于大多数 WebExtension API 都是正确的。
{
"name": "Your Addon",
"manifest_version": 2,
"background": {
"scripts": ["cancel-google.js"]
}
}
那么应该可以了。
Smile4ever 的答案是正确的,但我发现我的原始代码存在一些其他问题。
首先 - 我的原始内容脚本的 'timing' 期是一个转移注意力的问题。原来的content script虽然会写入页面的log,但是对加载资源没有影响。相同的脚本,作为后台脚本,不会将任何内容(我注意到)写入控制台日志,但它会起作用。
其次 - 后台脚本需要比我原来更多的权限(比 mozilla.org link 中描述的更多)。
"permissions": [
"http://*/*",
"https://*/*",
"webRequest",
"webRequestBlocking" ]
以上权限为adequate/excessive;您还可以将 "http(s)://*/*"
替换为请求资源和要阻止的资源的页面的实际 url。