javascript - 谷歌浏览器/网络浏览器扩展:适配请求
问题描述
我最近为 Chrome 浏览器创建了一个扩展,它只是将调用从一个 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
,但我指定了两次。
我的问题是:这些规则是否等效?
我对其进行了测试,仅在清单文件中指定它就足够了,但是它们在内部的工作方式是否相同?
或者可能两次指定它会导致双重验证并降低性能?
解决方案
manifest.json 中的 URL 权限允许扩展通过任何 API 处理这些 URL,而不仅仅是 webRequest,但由于您不需要其他任何东西并且只使用单个 URL 模式,因此您确实可以
["<all_urls>"]
在 webRequest 侦听器注册中指定为简单起见.在这种简单的情况下,在浏览器的本机 C++ 代码中检查两次 URL 对性能的影响不应该被检测到,尤其是与激活 JavaScript 上下文以运行侦听器的任务相比,这会消耗数千倍的 CPU 周期。
潜在的改进:
最快的解决方案是chrome.declarativeWebRequest。
对于这种情况,我猜你需要 RedirectByRegEx 操作。如果目标是避免重复,您可以使用 chrome.runtime.getManifest:
{urls: chrome.runtime.getManifest().permissions.filter(p => p.includes('/'))}
唯一的缺陷是
"permissions"
不需要最后一个*
主机,因为它们忽略了路径部分,因此请确保始终将其添加到 manifest.json 中。
推荐阅读
- regex - 如何将文本文件中的字符串作为标记变量提取到电子表格中
- c++ - 如何处理非 default_constructible tyname 变量
- python - 如果您按屏幕上的任意位置,则会显示消息
- javascript - 带有提示的随机密码生成器
- c# - 我们可以将静态成员变量传递给构造函数来解决统一问题吗?
- c# - Google.Apis.Auth 1.46.0.0 已安装,但随后被要求提供多个版本
- r - RMarkdown 没有编译成 PDF
- r - 如何使用一种颜色创建微生物群数据的条形图以获得更高的分类等级和渐变颜色
- c++ - 使用 boost/asio 从网页获取特定数据
- compiler-construction - 编译器如何实现类型别名?