2

当我尝试加载我的 chrome 扩展时,我一直看到这个错误:

Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self' https://ajax.googleapis.com".

这是我manifest.json的一部分:

...

 "background": {
 "scripts": ["launcher.js"]
     },
"options_page": "options.html",
"content_security_policy": "script-src 'self' https://ajax.googleapis.com; object-src 'self'",
"permissions": [
"tabs", "notifications", "http://*/*", "https://*/*"

...

在我的整个 javascript 中,我只与https://ajax.googleapis.com通信,并且我已经确保使用Inspect views的Network选项卡。

而且我已经验证了我所有的 javascript 代码都只位于我的.js文件中。(是的,我在必要时使用addEventListener() 。

有什么建议么?

更新:显示导致错误的代码(由 Rob 询问)这是我与任何服务器通信的唯一地方:

....
$.ajax({
        type: "get",
        url: "https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=" + storyCount + "&callback=?",
        data: {
                q: link,
                output: "json_xml"
             },
        async: false,
        dataType: "json",
        success: function (data) {
             if (data.responseStatus == 200) {
                //process JSON
              }
....
4

2 回答 2

2

随着从 Manifest Version 1 到 2 的更改。Chrome 扩展程序不允许您使用内联 javascript。您需要将所有 javascript 放在 .JS 文件中,并将其包含在 html 页面中。

同时删除所有 onclick、onchange、onsubmit 到 eventlistner 事件。

谢谢

于 2012-11-29T07:28:45.933 回答
0

此错误消息与您对其他服务器的请求无关 - 它与内联脚本有关。如果您没有任何内联脚本,那么很可能会出现它,因为您在某处通过 或类似方式动态创建eval()代码new Function()。例如,如果 jQuery 没有找到JSON.parse()方法,它会解析 JSON(但是在 Chrome 中这个方法通常应该可用)。根据您在此处提供的信息,无法判断哪个代码对错误负责。

无论如何,您绝对不应该像Rob W在评论中正确指出的那样使用 JSONP。JSONP 将在您的扩展上下文中从远程服务器执行代码,这本质上是不安全的——理论上它只会调用回调,但实际上它也可能做一些恶意的事情。您应该改用 JSON(正在下载和解析数据,不执行远程代码)并ajax.googleapis.com从您的内容安全策略中删除。

于 2012-08-20T08:41:39.097 回答