为什么Chrome不加载启用本地主机的内容安全策略扩展程序?

3

我正在开发Chrome扩展程序,希望可以从localhost加载脚本以进行开发。因此,我更新了清单文件并添加了以下行:

"content_security_policy": "script-src 'self' http://localhost; object-src 'self'",

根据内容安全策略(Content Security Policy)文档,使用localhost127.0.0.1而不使用https是没问题的。

但是,当我试图从chrome://chrome/extensions/加载扩展时,出现以下嘲讽性错误消息:

无法从“/Users/Tim/Desktop/temp/test”加载扩展。'content_security_policy'的值无效: 必须指定'script-src'和'object-src'指令(通过'default-src'显式或隐式地指定),并且两者都必须仅列出安全资源。您可以包含以下任何来源:“'self'”、“'unsafe-eval'”、“http://127.0.0.1”、“http://localhost”,或任何“https://”或“chrome-extension://”来源。请参见http://developer.chrome.com/extensions/contentSecurityPolicy.html了解更多信息。

为了确认这个问题,你可以创建一个带有以下manifest.json文件的空目录:

{
  "name": "Example extension",
  "description": "Trying to demonstrate a bug in Chrome",
  "version": "0.1",
  "homepage_url": "http://example.com",
  "content_security_policy": "script-src 'self' http://localhost; object-src 'self'",

  "manifest_version": 2
}

将目录作为未打包的扩展程序加载。您应该会收到错误提示。如果您删除 http://localhost 或将其更改为 https://localhost,则扩展程序将可以正常加载。

我有遗漏什么吗?

(注:我使用的是 Chrome 22.0.1229.79 版本)

谢谢!


看起来这个例子在 Chrome Canary(24.0.1280.0)中运行良好,所以我猜想这可能是一个已经修复并最终会出现在“正常”的 Chrome 版本中的错误。 - Timothée Boucher
1个回答

3
能够在内容安全策略(CSP)的值中添加 localhost 的功能是由Chromium 修订版 151470实现的,该版本已经包含在 Chrome 23 中(目前在开发渠道中,不久将进入测试渠道)。

感谢确认!我猜问题在于文档和错误信息超前了时代,给我造成了困惑。与此同时,我只是在 https 上提供我的文件 :) (这只是为了开发目的) - Timothée Boucher
1
9年过去了,这个问题又出现了。尽管官方文档说我们可以使用localhost。https://developer.chrome.com/docs/extensions/mv3/intro/mv3-migration/#content-security-policy - Tyler Xue

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接