如果我在background.js文件中使用“ comment2”代码,则会发送我的响应,并且“ myPara”段落元素值按预期显示“测试注释2”,并且我不会收到任何错误消息。
如果我使用'comment1'代码'myPara'段落元素值显示为'undefined',并且我收到以下错误消息:
事件处理程序中的错误:ReferenceError:未定义alarmTuneValue 内容:_genic_background_page.html 突出显示:sendResponse(alarmTuneValue);
unchecked runtime.lastError:消息端口在收到响应之前已关闭。 内容:timerpopup.html
听起来'comment1'代码甚至没有运行,因为它说没有定义alarmTuneValue。
我不太确定端口错误消息的含义,因为我是新手。我假设消息端口就像sendMessage和onMessage之间的隧道,可以在此之间来回发送信息。如果端口关闭,则无法再发送任何消息/响应。它是否正确?如果是这样,我不明白为什么使用“ comment1”代码而不是“ comment2”代码时端口会打开?
我只包括了与该问题有关的background.js和timerpopup.html文件以及manifest.json文件中的代码。
background.js:
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse){
if(message != "stop timer"){
}else{
/* comment1:
chrome.storage.sync.get('number', function(data){
alarmTuneValue = "test";
});
*/
// comment2: alarmTuneValue = "test"
sendResponse(alarmTuneValue);
clearTimeout(myTime);
clearInterval(myInt);
}
})
timerpopup.js:
form.stop.addEventListener("click", function(){
chrome.runtime.sendMessage("stop timer", function(response){
document.getElementById("myPara").innerHTML = response;
});
})
manifest.json:
{
"name": "timer",
"version": "1.0",
"description": "timer which plays tune at end and shows alert message!",
"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": true
}
}