【发布时间】:2020-07-16 23:12:35
【问题描述】:
我需要关闭 Google Chrome 中的特定标签。 行为是扩展程序在加载后打开 URL,这是无法避免的。
这不起作用:
#manifest.json
{
"name": "Close Tab Helpx Adobe",
"description": "Close the url http://www.example.com",
"version": "0.1",
"manifest_version": 2,
"app": {
"background": {
"scripts": ["background.js"],
"persistent": false
}
},
"icons": {
"16": "close-tab-helpx-adobe-16.png",
"128": "close-tab-helpx-adobe-128.png"
},
"permissions": [
"tabs"
]
}
#background.js
chrome.tabs.onUpdated.addListener(function(tab) {
if(tab.url=="http://www.example.com") {
chrome.tabs.remove(tab)
}
});
在开发者模式下,我可以看到Uncaught TypeError: Cannot read property 'onUpdated' of undefined
如您所见,我是初学者。 你知道如何实现吗?
编辑: 我也试过了:
#background.js
chrome.tabs.onActivated.addListener(function(activeInfo) {
chrome.tabs.get(activeInfo.tabId, function(tab){
if(tab.url=="http://www.example.com") {
chrome.tabs.remove(tab);
}
});
});
chrome.tabs.getCurrent(function(tab){
if(tab.url=="http://www.example.com") {
chrome.tabs.remove(tab);
}
});
chrome.tabs.query({currentWindow: true, active: true}, function(tabs){
if(tabs[0].url=="http://www.example.com") {
chrome.tabs.remove(tabs[0]);
}
});
错误一样,只是属性名改了onActivated、getcurrent或者query
【问题讨论】:
-
没有看到 manifest.json 我只能猜测您正在尝试在内容脚本中执行此操作,但您不能。此 API 必须在 background script 中使用。还要始终参考每个事件和方法的文档:您的 onUpdated 侦听器和 remove() 方法的参数都不正确。
-
谢谢,在询问之前我尝试了很多方法。就我而言,这些行来自 background.js(我只是按照 chrome 文档进行操作,我的搜索为我提供了一些编写这些行的线索)。看来我需要搜索更多,抱歉问...
-
我猜 manifest.json 的
"permissions"列表没有"tabs"? -
您有一个 Chrome 应用程序,而不是扩展程序。应用程序不能使用 API 进行扩展。如果您不小心这样做了,请删除
"app"部分并改为声明 background script。 -
chrome.tabs.remove 接受 id 或 id 数组,而不是选项卡对象。