【问题标题】:Can an extension close a tab?扩展程序可以关闭标签吗?
【发布时间】:2015-08-25 10:41:12
【问题描述】:

这是在继续:Script to close the current tab in Chrome

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

难道也不能关闭带有扩展名的标签页吗?

【问题讨论】:

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


    【解决方案1】:

    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_at": "document_start" 添加到内容脚本的配置中,以便它更早地触发。

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

    【讨论】:

    • 非常感谢,第一个有效。第二个没有。看起来你对 chrome 扩展非常了解,所以我想咨询你,因为我是一个初学者,我想做一个扩展,在视频结束后关闭一个 youtube 标签,并且该标签不专注于超过一分钟。你怎么知道哪个脚本(内容或背景)?例如,YT 事件 (developers.google.com/youtube/iframe_api_reference#Events) 是否会转到内容脚本?
    • 另外,你有什么建议或者从哪里开始制作这个扩展?
    • 大家应该仔细阅读Overview page,它包含了很多重要的信息。如果您有well-defined questions,那么可以提供帮助。 This question 可能有用。
    猜你喜欢
    • 2014-02-21
    • 2013-04-03
    • 2018-10-20
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 2016-11-11
    • 2019-03-16
    相关资源
    最近更新 更多