我正在编写一个Chrome扩展程序,点击它后会在给定的时间后关闭当前选项卡
我正在发送一条消息,从 popup.js 到 background.js 。但标签不会关闭。
当我取消注释时,警报会起作用,因此它似乎只是删除行。我认为这是tab.id
。
chrome.extension.onMessage.addListener(
function message(request, sender, callback) {
var ctr = 0;
ctr = parseInt(request.text, 10);
setTimeout(function() {
chrome.tabs.getCurrent(function(tab) {
//window.alert("Working?");
chrome.tabs.remove(tab.id, function(){});
});
}, ctr);
}
);
答案 0 :(得分:2)
<强> 1 强>
chrome.extension 没有onMessage
个事件。我认为你的意思是正确的 chrome.runtime.onMessage
<强> 2 强>
你可能误解了(*) chrome.tabs.getCurrent 的目的:
获取此脚本调用的选项卡。如果从非选项卡上下文调用(例如:后台页面或弹出视图),则可能未定义。
因为您是从非标签语境(即背景页面)调用它,所以tab
将是未定义的。
(*):“误解”,如“不费心阅读手册”......
第3 强>
目前尚不清楚是否要在设置定时器或触发定时时关闭活动选项卡。 (在你的代码中,你试图做后者,虽然前者对我更有意义。)
正确的方法:
chrome.runtime.onMessage.addListener(function message(msg) {
var ctr = 0;
ctr = parseInt(msg.text, 10);
setTimeout(function() {
chrome.tabs.query({ active: true }, function(tabs) {
chrome.tabs.remove(tabs[0].id);
});
}, ctr);
});
另请注意,使用setTimeout
和setInteval
等功能只能在持久背景网页中可靠地运行(但不能在 event pages 中使用)。如果可能,建议您迁移到事件页面(更“资源友好”),在这种情况下,您还必须切换到 alarms API 。