如何关闭带有 Chrome 扩展名的当前 Chrome 标签页?

How to close the current Chrome tab with a Chrome Extension?

我几乎完成了一个简单的 Chrome 扩展的构建,我想添加的最后一件事是关闭当前选项卡。

此扩展程序的作用是,当它检测到 Zoom 加入会议页面时,它会单击该按钮以打开 Zoom 应用程序。我希望它在那之后关闭 Zoom 加入页面。

有很多问题说明如何做,但我找不到关于如何做的完整示例。在 the documentation on how to send messages 中,它有三个代码块,我无法理解它的作用以及如何使用它来关闭当前选项卡。

This question 说需要tab的id才能关闭,所以我想获取到id然后关闭页面(好像需要给后台传个消息)。

If you wanna to use chrome.tabs then pass message from content_script to background script and play with chrome.tabs.

这是我当前的分机:

manifest.json

{
    "name": "Auto Zoom Join",
    "version": "1.0.0",
    "manifest_version": 2,
    "author": "",
    "description": "Automatically joins zoom meetings.",
    "permissions": ["tabs"],
    "content_scripts":
    [{
        "matches": ["https://*.zoom.us/j/*"],
        "js": ["join.js"]
    }]
}

join.js

if(location.href.length-(location.href.indexOf("j/")+11)-location.hash.length>0){
  document.getElementsByClassName("_1FvRrPS6")[0].click();
}
// you can ignore above line; just detects if valid zoom join meeting page, clicks button

chrome.tabs.query({
  currentWindow:true,
  active:true
},function(tabs){
  chrome.tabs.remove(tabs[0].id);
});

/*
  The above line doesn't work.  It only works in background page, so I need to
  somehow send a message to the background page.
*/

那么基本上我该如何向关闭 Chrome 选项卡的后台页面发送消息?

您可以使用 chrome.runtime.sendMessage API.

从内容脚本向后台脚本发送消息
chrome.runtime.sendMessage({ msg: "tab_close_msg", time: time }, function (response) {
    console.log("response from the bg", response)
});

并且您可以使用 chrome.runtime.onMessage.addListener API

从后台页面接收消息
chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
if (request.message === "tab_close_msg") {
    // add your code to close tab
}

})