13

我正在制作一个谷歌浏览器扩展,我想在其中使用谷歌地图。问题是当我运行我的脚本时它给了我这个错误

Refused to load script from 'https://maps.googleapis.com/maps/api/js?key=XXXXXXXXXXXXXXXX&sensor=false' because of Content-Security-Policy.

这是我的清单文件

{
  "name": "Name",
  "version": "1.0",
  "manifest_version": 2,
  "background": { 
    "scripts": [
      "js/script.js"
    ] 
  },
  "description": "Desc",
  "browser_action": {
    "default_icon": "images/icon.png",
    "default_title": "Title",
    "default_popup": "html/popup.html"
  },
  "permissions": [ 
    "http://*/",
    "http://*.google.com/",
    "http://localhost/*"
  ],
  "content_security_policy": "script-src 'self' http://google.com; object-src 'self'"

}

我正在添加这样的脚本

<script src="../js/libs/jquery.js"></script>
  <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=XXXXXXXXXXXXXX&sensor=false"></script>
  <script src="../js/plugins/easing.js"></script>
  <script src="../js/script.js"></script>

为什么我一次又一次地收到这个错误?请帮忙...

更新一

我将这两个权限添加到清单文件但仍然无法正常工作

"https://maps.google.com/*",
"https://maps.googleapis.com/*",

更新二

我也使用了这种 content_security_policy

"content_security_policy": "default-src 'none'; style-src 'self'; script-src 'self'; connect-src https://maps.googleapis.com; img-src https://maps.google.com"

但以上对我也不起作用

4

3 回答 3

27

我认为这里的问题是您没有正确设置 Google Maps URL 的内容安全策略。您应该将清单文件中的“content_security_policy”更改为以下内容:

"content_security_policy": "script-src 'self' https://maps.googleapis.com https://maps.gstatic.com; object-src 'self'"

这仅仅意味着您允许从自我/当前页面和“https://maps.googleapis.com”运行脚本。

试试这个,看看它是否有帮助。

于 2012-11-05T11:14:47.673 回答
2

我遇到了同样的问题,并通过将 API URL 从 http 替换为 https 版本来解决。

在 HTML 中来自:

<script type='text/javascript' src='http://maps.google.com/maps/api/js?v=3.3&sensor=false'></script>

到:

<script type='text/javascript' src='https://maps-api-ssl.google.com/maps/api/js?v=3.3&sensor=false'></script>

然后在 manifest.json 中将https://maps-api-ssl.google.com添加到 CPS

我不知道你是否还需要这些信息。但是我在谷歌上搜索并花了一些时间但找不到直接的答案,所以我在这里写信希望它能帮助任何人。

于 2014-04-08T07:05:17.317 回答
-1

内容安全策略使您免受 XSS 攻击。但这意味着您需要明确地将外部资源列入白名单。您可以通过提供额外的 HTTP 标头或通过以下<meta>标记来实现:

<meta http-equiv="Content-Security-Policy" 
    content="default-src 'self' data: gap: ws: ; 
    style-src 'self' https: *.googleapis.com; 
    script-src 'self' https: *.googleapis.com;
    media-src 'none'; 
    font-src *;
    connect-src *;
    img-src 'self' data: content: https: *.googleapis.com;"> 
于 2018-10-11T09:09:41.433 回答