我正在尝试创建闹钟/计时器扩展。以前从未使用过扩展程序,并且遇到了此问题错误消息:
”拒绝执行内联事件处理程序,因为它违反了以下“内容安全策略”指令: “ script-src'self'https://apis.google.com”。要么是'unsafe-inline'关键字,要么是一个哈希('sha256 -...'), 或需要使用nonce('nonce -...')才能启用内联执行。“
它似乎是指我的background.js代码中的“ onended”事件。
我发现这是一个类似的问题:
How to fix chrome-extension inline JavaScript invocation error?
由于我是新手,所以我不确定如何使这些修补程序起作用。
我尝试将其添加到manifest.json文件中,但没有执行任何操作: “ content_security_policy”:“脚本src'自我'https://apis.google.com;对象src'自我'”
然后,我阅读了其中的一些内容,但不确定如何实际获取代码的哈希值: https://www.w3.org/TR/2015/CR-CSP2-20150721/#script-src-hash-usage
上面的链接说:
“您可以仅通过openssl程序在命令行上获取字符串的摘要”
我不确定openssl程序在哪里/什么地方。我将如何获取此哈希?
manifest.json“ content_security_policy”中的文本应为该哈希信息?
chrome.runtime.onMessage.addListener(function(response){
myInterval = setInterval(function(){
var audio = new Audio("Gentle-wake-alarm-clock.mp3");
audio.setAttribute("onended",
"function(){alert('your ' + response + ' second alert has ended')}");
audio.play();
clearInterval(myInterval);
}, response * 1000);
})
我的manifest.json文件:
{
"name": "timer",
"version": "1.0",
"description": "Build a timer!",
"manifest_version": 2,
"permissions": ["storage"],
"options_page": "options.html",
"browser_action": {
"default_popup": "timerpopup.html",
"default_icon": "green alarm.png"
},
"background": {
"scripts": ["background.js"],
"persistent": false
},
"content_security_policy":"script-src 'self' https://apis.google.com; object-src 'self'"
}
答案 0 :(得分:1)
不使用内联事件处理程序而是使用addEventListener
可能会更容易。您也可以使用setTimeout
而不是setInterval
来避免调用clearInterval
:
chrome.runtime.onMessage.addListener(function(response) {
myTimeout = setTimeout(function() {
var audio = new Audio("Gentle-wake-alarm-clock.mp3");
audio.addEventListener('ended', function() {
alert('your ' + response + ' second alert has ended');
});
audio.play();
}, response * 1000);
});
如果您不在其他任何地方使用clearInterval
/ clearTimeout
,也可以删除myTimeout =
。