我最近为Chrome浏览器创建了一个扩展程序,该扩展程序仅将呼叫从一个URL重定向到另一个URL。
因此,我需要在下面添加权限:
"permissions": ["webRequestBlocking", "webRequest", "*://docs.microsoft.com/*"]
要重定向URL,我添加了此类事件处理程序:
chrome.webRequest.onBeforeRequest.addListener(
(event) => {
if ( event.url.includes("/pl-pl/")) {
return { redirectUrl: event.url.replace("/pl-pl/", "/en-us/") };
}
},
{urls: ["*://docs.microsoft.com/*"]},
["blocking"]
);
很显然,我想捕获对docs.microsoft
的调用,但是我两次指定了它。
我的问题是:这些规则是否等效?
我对其进行了测试,仅在清单文件中指定它就足够了,但是它们在内部的工作方式是否相同?
或者两次指定它会导致双重验证并降低性能?
答案 0 :(得分:1)
manifest.json中的URL权限允许扩展程序通过任何API处理这些URL,而不仅是webRequest,而且由于您不需要其他任何东西并且仅使用单个URL模式,因此您确实可以指定为简化起见,在WebRequest侦听器注册中使用["<all_urls>"]
。
在这种简单情况下,无法检测到在浏览器的本机C ++代码中两次检查URL的性能影响,特别是与激活JavaScript上下文以运行您的侦听器的任务相比,这会耗费数千美元更多的CPU周期。
潜在的改进:
最快的解决方案是chrome.declarativeWebRequest。
对于这种情况,您可能需要RedirectByRegEx操作。
如果目标是避免重复,则可以使用chrome.runtime.getManifest:
{urls: chrome.runtime.getManifest().permissions.filter(p => p.includes('/'))}
唯一的陷阱是"permissions"
不需要主机中的最后一个*
,因为它们会忽略路径部分,因此请确保始终将其添加到manifest.json中。