关闭镶边扩展程序中的当前选项卡

closing the current tab in a chrome extention

本文关键字:选项 程序 扩展      更新时间:2023-09-26

我正在编写一个 chrome 扩展程序,单击该扩展程序时,将在给定时间后关闭当前选项卡。
我正在发送一条带有时间的消息,从弹出窗口.js后台.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.
chrome.extension 没有onMessage事件。我假设你的意思是正确的chrome.runtime.onMessage

阿拉伯数字。
您可能误解了(*)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 等函数只能在持久后台页面(而不是事件页面)中可靠地工作。如果可能,建议您迁移到事件页面(更"资源友好"),在这种情况下,您还必须切换到警报 API