gpt4 book ai didi

javascript - 关闭 Chrome 扩展中的当前选项卡

转载 作者:行者123 更新时间:2023-12-02 18:09:00 25 4
gpt4 key购买 nike

我正在编写一个 Chrome 扩展,单击该扩展后,将在给定时间后关闭当前选项卡。
我正在发送一 strip 有时间的消息,从 popup.jsbackground.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

2.
您可能误解了(*) chrome.tabs.getCurrent 的目的:

Gets the tab that this script call is being made from. May be undefined if called from a non-tab context (for example: a background page or popup view).

由于您是从非选项卡上下文(即后台页面)调用它,因此 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

关于javascript - 关闭 Chrome 扩展中的当前选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19865859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com