我是一名JavaScript新手,撰写我的第一个Chrome扩展,并且被阻止在消息传递上。我的扩展包括后台脚本,浏览器操作图标和内容脚本。内容脚本(一个计时器,用于测量制表符中的秒数)需要更新后台脚本并在关闭标签时更改图标,但由于内容脚本无法访问事件选项卡,因此需要监听来自后台脚本的消息。消息传递:关闭选项卡的背景脚本
下面是我设置了后台脚本监听器监听关闭的标签:
// 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();
}
});
}
我在背景脚本控制台中看不到内容脚本的响应。由于我正在关闭该选项卡,因此我无法查看内容脚本控制台。信息在哪里出错?有没有更好的方法来调试呢?内容脚本在选项卡关闭时可以采用其他方式进行监听吗?
你可以尝试使用'端口'进行通信 - 也许那么你将能够检测到指定的标签/页面是否已关闭。 – hamczu 2012-04-20 00:47:13