关闭chrome扩展中的当前选项卡

时间:2013-11-08 18:19:20

标签: javascript google-chrome google-chrome-extension tabs

我正在编写一个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);
    }
);

1 个答案:

答案 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);
});

另请注意,使用setTimeoutsetInteval等功能只能在持久背景网页中可靠地运行(但不能在 event pages 中使用)。如果可能,建议您迁移到事件页面(更“资源友好”),在这种情况下,您还必须切换到 alarms API