扩展程序可以关闭选项卡吗?

shi*_*zou 2 javascript google-chrome google-chrome-extension

这是在继续:在 Chrome 中关闭当前选项卡的脚本

我现在正在尝试使用扩展程序而不是 tampermonkey 脚本来执行此操作,"matches" : ["*://*.youtube.com/*", "*://youtube.com/*"],我的清单文件中有该脚本,并且 js 脚本只是简单的chrome.tabs.remove(tab.id);或者window.close();但两者都不会关闭我打开的 youtube.com 页面。

是否也无法关闭带有扩展名的选项卡?

Xan*_*Xan 5

chrome.tabs 对内容脚本不可用,因此如果它在您的代码中,它会因异常而失败。

window.close 有一个警告:

仅允许为使用该window.open()方法的脚本打开的窗口调用此方法。如果窗口不是由脚本打开的,JavaScript 控制台中出现以下错误:脚本可能不会关闭不是由脚本打开的窗口。

我不确定它是否适用于内容脚本 - 但假设它适用。

您可以通过添加后台脚本(可以访问chrome.tabs)并从那里检测导航,或者只是从上下文脚本中向后台脚本发送消息来使其工作。

  1. 后台留言:

    // Content script
    chrome.runtime.sendMessage({closeThis: true});
    
    // Background script
    chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
      if(message.closeThis) chrome.tabs.remove(sender.tab.id);
    });
    
    Run Code Online (Sandbox Code Playgroud)

    我建议添加"run_at": "document_start"到内容脚本的配置中,以便更早地触发。

  2. 更好的是,您不需要内容脚本。您可以依赖chrome.tabs事件或chrome.webNavigationAPI。您可能需要主机权限(例如"*://*.youtube.com/*")才能工作("webNavigation"如果您使用它)。