2015-07-20 84 views
3

我是在学校学习C++后自学的JavaScript,我认为这是一个很好的做法,试图构建Chrome扩展。我正在尝试访问OpenWeatherMap的API以获取城市ID进行天气搜索。Chrome扩展“Script-src”错误(自学)

这是导致问题的部分代码:

var cityParam = $('#cityInput').val(); //ex. of cityParam = "New York" 
     var cityURL = "http://api.openweathermap.org/data/2.5/find?callback=?&q="+ cityParam + "&type=like&sort=population&cnt=30"; 

     var cityJSON; 

     $.getJSON(cityURL, function(data) { 
      cityJSON = data; 
} 

我从Chrome中收到了错误:

Refused to load the script [url] ... because it violates the following Content Security Policy directive: "script-src 'self' blob: filesystem: chrome-extension-resource:". 

我做了谷歌搜索,它似乎像Chrome浏览器扩展在你可以或不可以做的事情上非常严格(例如:不能嵌入javascript)。对Web开发不太熟悉,我不太确定从哪里开始寻找如何解决这个问题。

的URL返回(我相信)一个JSON,但它有一个额外的开始?(并与结束)

感谢您的帮助!

编辑:
下面是我所采取的错误的截图。它显示红色突出显示的文本是从jQuery。也许我传入的URL不能被$ .getJSON()处理? enter image description here

编辑2:
我加入由梅达的建议下我的清单,但错误依然存在:

"permissions": [ 
    "http://api.openweathermap.org/*" 
] 
+0

这可能也有帮助:http://stackoverflow.com/questions/25867584/extension-refuses-to-load-the-script-due-to-content-security-policy-directive – igaurav

+3

如果您的目标端点支持https ,那么只需在'manifest.json'处添加这一行:'“content_security_policy”:“script-src'self'https://example.com; object-src'self'”' – makerj

回答

2

URL包括callback=?这是JSONP一个共同的模式,其中支持它的API将在一个简单的JavaScript函数包装JSON完成。响应数据被传递给JS函数并避免浏览器XHR限制。只需从API网址中删除callback=?即可,您应该没问题。

+0

这与他的问题无关,因此不是一个有效的答案。 –

+1

@ZigMandel nope。 '拒绝加载脚本'是因为'callback =?'告诉服务器返回JavaScript而不是JSON。 – abraham

+0

没有。看到其他答案和理由关闭,因为你看起来像是第二个错误。他问为什么拒绝加载你。 –

0

这并不是说是无效的JSON,这是一个出于安全目的限制Chrome应用程序。

您将需要为您的应用程序授权加载外部url

这是在manifest文件

"permissions": [ 
    "http://api.openweathermap.org/*" 
] 
+0

谢谢!在清单文件中添加URL后,我似乎仍然得到_Refused加载script_错误。红色下划线的文字似乎在jQuery中。我已经更新了第一篇文章,以显示我拍摄的截图。 – Kevin

+0

同样适用于我。将此添加到'manifest.json'没有帮助。 –