我有一个错误:
拒绝执行内联脚本,因为它违反了以下内容安全性 政策指令:
"script-src 'self' chrome-extension-resource:"
。'unsafe-inline'
关键字,a 启用哈希('sha256-...'
)或随机数('nonce-...'
) 内联执行。铬延伸://ldbpohccneabbobcklhiakmbhoblcpof/popup.html:1
拒绝将字符串评估为JavaScript,因为
'unsafe-eval'
是 以下内容安全性中不允许使用脚本源 政策指令:"script-src 'self' chrome-extension-resource:"
。
代码popup.js
$(document).ready(function() {
$.getJSON('http://.......alerts.json', function(data) {
alert('HELLO');
});
});
清单:
{
"manifest_version": 2,
"name": "Alert",
"description": "This extension for .",
"version": "2.0",
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",
"permissions": [
"http://www.......il/"
],
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"content_scripts": [ {
"js": [ "jquery.min.js", "popup.js" ],
"matches": [ "http://*/*", "https://*/*"]
}]
}
弹出窗口:
<!doctype html>
<html>
<head>
<title>Getting Started Extension's Popup</title>
<style>
body {
min-width: 357px;
overflow-x: hidden;
}
img {
margin: 5px;
border: 2px solid black;
vertical-align: middle;
width: 75px;
height: 75px;
}
</style>
<head>
<script src='jquery.min.js'></script>
<script src='popup.js'></script>
</head>
</head>
<body>
</body>
</html>
答案 0 :(得分:13)
我收到此消息是因为Chrome不再允许内联脚本和内联事件处理程序(如onClick):必须将它们移动到外部JS文件(例如popup.js)和addEventListener()必须是用于将事件关联到DOM对象。
例如:
<body onload="initialize()">
<button onclick="handleClick()" id="button1">
必须替换为:
window.addEventListener("load", initialize);
document.getElementById("button1").addEventListener("click",handleClick);
在您的情况下,我在HTML中看不到任何JS,但您可以尝试一些事项:
答案 1 :(得分:3)
我有一个非常类似的问题。我没有使用任何内联脚本或内联事件处理程序,但仍然得到该错误。事实证明,jQuery在内部尝试评估此类请求的响应,这在Chrome扩展程序中是不允许的。在我的情况下,我使用prefs = getPreferences(Context.MODE_PRIVATE);
editor = prefs.edit();
totalCount = prefs.getInt("counter", 0);
if(totalCount == 10){
fullScreenAd2.show();
totalCount = 0;
} else {
totalCount++;
}
editor.putInt("counter", totalCount);
editor.commit();
和$.ajax()
。我通过将dataType: 'json'
更改为dataType
,然后使用text
手动解析JSON来解决了该问题。
另外值得一提的是,大多数jQuery API在解析时会尝试执行给定html字符串中包含的脚本,这会在Chrome扩展中使用时导致类似的错误。在这种情况下,需要在响应中显式转义脚本。以下是jQuery JSON.parse()
文档的引用:
大多数接受HTML字符串的jQuery API都会运行HTML中包含的脚本。除非keepScripts显式为true,否则jQuery.parseHTML不会在已解析的HTML中运行脚本。但是,在大多数环境中仍然可以间接执行脚本,例如通过属性。呼叫者应该注意这一点,并通过清除或转发来自URL或cookie等来源的任何不受信任的输入来防范它。为了将来的兼容性,当keepScripts未指定或错误时,调用者不应依赖于运行任何脚本内容的能力。
请注意,由于Chrome对内联脚本评估的限制,这些点在Chrome扩展程序中使用时会出现问题。它们可能不会成立。
答案 2 :(得分:0)
我也面临这个问题。
我在index.html
的{{1}}中放置了以下代码
head-tag
然后我将其移动到文件<script>
var global = global || window;
var Buffer = Buffer || [];
var process = process || {
env: { DEBUG: undefined },
version: []
}
</script>
中,并在
script.js
中
index.html
仍然出现该错误,最后删除了<script src="./script.js"></script>
并解决了问题
./