29

这与Chrome扩展相关。我正在尝试使用Google Chart API中的一个简单的API内容安全政策:无法在Chrome扩展程序中加载Google 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_version": 2, 
    "permissions": ["http://*.google.com/"], 
    "content_security_policy": "script-src 'self' http://www.google.com; object-src 'self'", 
} 

任何想法?

+0

使用'的https:'资源。 Http资源永远不会列入白名单。 –

回答

22

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

查看页面的Relaxing the default policy部分。它提到您只能列入白名单HTTPS,chrome-extensionchrome-extension-resource

+0

感谢@Amaan它使它工作...几乎! 我应该有其他政策吗?即使现在谷歌API加载,我无法启动它。 '' 拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“script-src”self'https://www.google.com“。 – Laurent

+1

那么,没有内联脚本!相反,使用'document.getElementById('elementID')。addEventListener'来处理事件。为您的JS代码块添加一个'popup.js'文件。请参阅http://developer.chrome.com/trunk/contentSecurityPolicy.html#H3-1 –

28

我在过去的12个小时里与这个问题摔跤,并最终得到它的工作。为什么需要这么长时间?因为我多次被抛弃。首先,虚假引用:

  1. “使其成为HTTPS” - 无所谓。我的Chrome扩展程序现在可以定期对其他域进行HTTP调用,并且工作得很好。 (更新:稍微澄清一点:“让它成为https”的神话源于人们在加载SCRIPT时倾向于遇到的类似问题,如果需要引入外部.js文件,那么是的,您需要修改你的content_security_policy并包含正确的主机名,这似乎只接受https。请记住,这与为外部主机名寻找类似于REST服务的东西不同。正如我前面所述,这不需要修改content_security_policy和https。 )

  2. “在您的JQuery AJAX调用中使用JSONP” - 这可能是解决普通网页中跨域AJAX的一种方法,但由于内置的​​内容安全性政策。此外,实现JSONP听起来像一个PITA,因为它需要服务器端的更改来处理回调参数(或者,我还不确定)。无论如何,没有必要。 “在扩展版本中包含内容安全策略(CSP)字符串” - 在清单版本2下,默认字符串正常工作:“script-src'self'; object-src'self'”。你甚至不必明确地指定它。您需要的是将您试图从扩展程序中打出的域作为“权限”值加入。

解决办法:

从您的扩展名的所有内嵌的JavaScript。把它放到一个单独的.js文件中。我怀疑对于大多数HTML文件与任何体面的JavaScript,这个过程将吸吮。幸运的是,我所拥有的只是一个正文,我可以将其作为window.addlistener onload事件移入单独的js文件中。

你真的需要读闯过此问题的页面是在这里:https://developer.chrome.com/apps/contentSecurityPolicy

+0

请显示如何解决这种情况的代码示例,特别是在清单文件内的'content_security_policy'中。 – Mohammad

相关问题