2015-07-20 48 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'沒有幫助。 –