今天在測試Cordova的程式時,在Chrome中瀏覽時出現錯誤:
Refused to execute inline script
because it violates the following Content Security Policy directive:
"script-src 'self' chrome-extension-resource:".
但是在IE、Firefox卻不會有這個錯誤出現,找到google之後發現了因,
因為Cordova在建立專案後,在index.html中的Meta加入下列的語法:
<meta http-equiv="Content-Security-Policy" content="default-src '
self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src
'self' 'unsafe-inline'; media-src *">
所以Chrome會擋住嵌在HTML內的Javascript及onClick等事件的執行,
必須把在HTML內嵌入的Javascript獨立出來成為一個js檔就可以了,
例如我原本的程式:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Security-Policy" content="default-src
'self' data: gap: https://ssl.gstatic.com 'unsafe-eval';
style-src 'self' 'unsafe-inline'; media-src *">
<meta name="format-detection" content="telephone=no">
<meta name="msapplication-tap-highlight" content="no">
<meta name="viewport" content="user-scalable=no, initial-scale=1,
maximum-scale=1, minimum-scale=1, width=device-width">
<title>Hello World</title>
</head>
<body>
<div></div>
</body>
</html>
<!--<script type="text/javascript" src="cordova.js"></script>-->
<script>
alert("hi");
</script>
把script內程式獨立出一個js檔,名為test01.js,內容如下:
alert("hi");
而原本的HTML檔就修改為:
(略…)
<!--<script type="text/javascript" src="cordova.js"></script>-->
<script type="text/javascript" src="test01.js"></script>
這樣在Chrome上測試時就正常了。
當然我們也可以把<meta http-equiv="Content-Security-Policy"...
這一段meta刪掉,就沒有上述的問題了。