【问题标题】: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)使其工作,并从那里检测导航,或者只是从上下文脚本向后台脚本发送消息以执行此操作。
-
消息背景:
// 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" 添加到内容脚本的配置中,以便它更早地触发。
更好的是,您不需要内容脚本。您可以依赖chrome.tabs 事件或chrome.webNavigation API。您可能需要主机权限(例如"*://*.youtube.com/*")才能使其工作(如果您使用它,则需要"webNavigation")。