30

这是相对的 Chrome 扩展。我正在尝试一个简单的使用 Google Chart API

我在我的 html 文档“popup.html”中有此代码,该代码在单击图标时加载。

<!doctype html>
<html>
<head>
  <script type="text/javascript" src="js/libs/jquery-1.8.0.min.js"></script>
  <script type="text/javascript" src="js/popup.js"></script>
  <script type="text/javascript" src="http://www.google.com/jsapi?key=xxxxxxxxxxx"></script>

  [...]
</body>
</html>

我收到以下消息:

拒绝加载脚本“http://www.google.com/jsapi?key=xxxxxxxxxxx”,因为它违反了以下内容安全策略指令:“script-src 'self' chrome-extension-resource:”。

我知道这是与权限相关的事情,我试图修改我的 Manifest 文件但没有成功:

{
  [...]
  "manifest_version": 2,
  "permissions": ["http://*.google.com/"],
  "content_security_policy": "script-src 'self' http://www.google.com; object-src 'self'",
}

任何的想法?

4

3 回答 3

29

在过去的 12 个小时里,我一直在努力解决这个问题,最终让它发挥作用。为什么花了这么长时间?因为我多次被甩出赛道。一、假线索:

  1. “使它成为 HTTPS”——没关系。我的 Chrome 扩展程序现在对不同的域进行常规 HTTP 调用并且工作正常。(更新:再澄清一点。“使其成为 https”的神话植根于人们在脚本加载时往往遇到的类似问题。如果您需要引入外部 .js 文件,那么是的,您需要修改您的 content_security_policy 并包含正确的主机名,它似乎只接受 https。请记住,这与为 REST 服务之类的东西打外部主机名不同。正如我之前所说,这不需要修改 content_security_policy,也不需要修改 https。 )

  2. “在你的 JQuery AJAX 调用中使用 JSONP”——这可能是在普通网页中解决跨域 AJAX 的一种方法,但由于内置的​​内容安全策略,这在 chrome 扩展中不是必需的。此外,实现 JSONP 听起来像 PITA,因为它需要服务器端更改来处理回调参数(或其他东西,我仍然不确定)。无论如何,没有必要。

  3. “与扩展程序中的内容安全策略 (CSP) 字符串混淆” - 在清单版本 2 下,默认字符串可以正常工作:“script-src 'self'; object-src 'self'”。您甚至不必明确指定它。您需要的是包含您尝试从扩展中访问的域作为“权限”值。

解决方案:

从您的扩展程序中删除所有内联 javascript。将其放入单独的 .js 文件中。我怀疑对于大多数带有大量 javascript 的 html 文件来说,这个过程会很糟糕。对我来说幸运的是,我所拥有的只是一个主体 onload,我可以将它作为 window.addlistener onload 事件移动到一个单独的 js 文件中。

您真正需要阅读以解决此问题的页面在这里:https ://developer.chrome.com/apps/contentSecurityPolicy

于 2012-09-27T15:14:30.990 回答
22

只需让它使用https协议即可。您得到的错误是关于Content Security Policy

请参阅Relaxing the default policy页面的部分。它提到您只能将HTTPSchrome-extension和列入白名单chrome-extension-resource

于 2012-08-26T10:00:34.550 回答
0

当我运行 Augury chrome 扩展来调试 Angular 应用程序时,我收到此错误 [报告]。禁用扩展程序,错误就会消失。这不会帮助那些正在编写扩展的人,但它可能会帮助那些不是。

[Report Only] Refused to load the script 'https://apis.google.com/js/googleapis.proxy.js?onload=startup' because it violates the following Content Security Policy directive: "script-src 'report-sample' 'nonce-EagvF0PX1Z3gVL2Dka1hbA' 'unsafe-inline' 'strict-dynamic' https: http:". 'strict-dynamic' is present, so host-based whitelisting is disabled. Note that 'script-src-elem' was not explicitly set, so 'script-src' is used as a fallback.
于 2019-07-12T05:10:22.377 回答