Google Chrome /网络浏览器扩展程序:符合要求

时间:2020-03-21 17:30:32

标签: javascript google-chrome-extension

我最近为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的调用,但是我两次指定了它。

我的问题是:这些规则是否等效?

我对其进行了测试,仅在清单文件中指定它就足够了,但是它们在内部的工作方式是否相同?

或者两次指定它会导致双重验证并降低性能?

1 个答案:

答案 0 :(得分:1)

  1. manifest.json中的URL权限允许扩展程序通过任何API处理这些URL,而不仅是webRequest,而且由于您不需要其他任何东西并且仅使用单个URL模式,因此您确实可以指定为简化起见,在WebRequest侦听器注册中使用["<all_urls>"]

  2. 在这种简单情况下,无法检测到在浏览器的本机C ++代码中两次检查URL的性能影响,特别是与激活JavaScript上下文以运行您的侦听器的任务相比,这会耗费数千美元更多的CPU周期。

潜在的改进:

  • 最快的解决方案是chrome.declarativeWebRequest
    对于这种情况,您可能需要RedirectByRegEx操作。

  • 如果目标是避免重复,则可以使用chrome.runtime.getManifest:

    {urls: chrome.runtime.getManifest().permissions.filter(p => p.includes('/'))}
    

    唯一的陷阱是"permissions"不需要主机中的最后一个*,因为它们会忽略路径部分,因此请确保始终将其添加到manifest.json中。