我是一个 javascript 新手,正在编写我的第一个 Chrome 扩展程序,但我被困在消息传递上。我的扩展包括一个后台脚本、一个浏览器操作图标和一个内容脚本。内容脚本(一个衡量在标签中停留秒数的计时器)需要更新后台脚本并在标签关闭时更改图标,但由于内容脚本无法访问标签onRemove
事件,因此需要监听消息从后台脚本。
以下是我设置后台脚本侦听器以侦听关闭选项卡的方式:
// Listen for closed tabs.
chrome.tabs.onRemoved.addListener(function(tab) {
send_closed_message();
});
function send_closed_message () {
chrome.tabs.getSelected(null, function(tab) {
console.log("sending tab_closed to tab " + tab.id);
chrome.tabs.sendRequest(tab.id, {close: true},
function(response) {
console.log(response.timer_stop); });
});
}
这是内容脚本中侦听此消息的函数。
function main () {
console.log("main()");
timer = new Timer();
timer.start();
// Listen for window focus
window.addEventListener('focus', function() { timer.start(); } );
// Listen for window blur
window.addEventListener('blur', function() { timer.stop(); } );
// Listen for tab close
chrome.extension.onRequest.addListener(
function(request, sender, sendResponse) {
console.log(sender.tab ?
"from a content script:" + sender.tab.url:
"from the extension");
if (request.close === true) {
sendResponse({timer_stop: "stopped"});
timer.stop();
}
});
}
我在后台脚本控制台中看不到内容脚本的响应。由于我正在关闭选项卡,因此我无法查看内容脚本控制台。消息哪里出错了?有没有更好的方法来调试这个?当它的标签关闭时,内容脚本还有另一种方式可以监听吗?