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

相關問題