为什么声明了特定键的扩展可以访问 chrome:// 页面?

Why the extension with specific key declared can access chrome:// pages?

据我们所知,默认情况下 chrome 扩展无法访问 chrome:// 页面,例如 chrome://extensionschrome://settings。 (当然我们可以更改 chrome://flags/#extensions-on-chrome-urls 标志,但是 以下问题是基于我们没有更改默认标志 ​​)。

最近我碰巧发现ChromeVox(由chrome.google.com提供)在包括chrome://页面在内的所有页面中都能很好地工作。我查看了这个扩展的源代码,发现只要我们在manifest.json中为任何扩展添加下面一行,这个扩展就可以在chrome://页面中正常运行.

"key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEGBi/oD7Yl/Y16w3+gee/95/EUpRZ2U6c+8orV5ei+3CRsBsoXI/DPGBauZ3rWQ47aQnfoG00sXigFdJA2NhNK9OgmRA2evnsRRbjYm2BG1twpaLsgQPPus3PyczbDCvhFu8k24wzFyEtxLrfxAGBseBPb9QrCz7B4k2QgxD/CwIDAQAB"

所以看起来 chrome 有类似白名单的东西允许特定的扩展打破默认限制。我对吗?是否有官方指南来澄清这种行为?

附录:

下面是一个示例扩展,你会发现使用key,即使在chrome://extensions页,控制台也会输出test;但是一旦删除 key,什么也没有发生。

manifest.json:

{
  "manifest_version": 2,
  "name": "Test",
  "version": "1.0",
  "content_scripts": [
    {
      "matches": [
        "<all_urls>"
      ],
      "js": [
        "content.js"
      ]
    }
  ],
  "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEGBi/oD7Yl/Y16w3+gee/95/EUpRZ2U6c+8orV5ei+3CRsBsoXI/DPGBauZ3rWQ47aQnfoG00sXigFdJA2NhNK9OgmRA2evnsRRbjYm2BG1twpaLsgQPPus3PyczbDCvhFu8k24wzFyEtxLrfxAGBseBPb9QrCz7B4k2QgxD/CwIDAQAB"
}

content.js:

console.log('test');
  1. "key" 属性 在 manifest.json 中唯一 defines the extension's ID 加密形式。
  2. 一些 Google 扩展是不公平的(?)whitelisted 在 chromium 源代码中的 ID。
    在这种情况下,ChromeVox:

    scripting_whitelist_.push_back(extension_misc::kChromeVoxExtensionId);
    

    然后检查此白名单以查看扩展是否可以 运行 PermissionsData::CanExecuteScriptEverywhere, which is accessed in CheckRestrictedUrls 中的任何地方 我们可以看到受限制的方案:chrome://, chrome-extension://, chrome-debugger://