【问题标题】:Chrome and closing a specific tab URLChrome 并关闭特定标签 URL
【发布时间】: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]);
    }
});

错误一样,只是属性名改了onActivatedgetcurrent或者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 数组,而不是选项卡对象。

标签: google-chrome-extension


【解决方案1】:

感谢wOxxOm(和他的耐心),这里有一个代码可以完成这项工作:

#manifest.json
 {
    "name": "Close Tab Helpx Adobe",
    "description": "Close the url http://www.example.com",
    "version": "0.1",
    "manifest_version": 2,
    "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.onCreated.addListener(function(tab) {
        chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
                if(tab.url=="http://www.example.com") {
                    chrome.tabs.remove(tab.id);
                }
        });
    });

所以,我有我的答案。

要走得更远……

Haibara Ai“请注意 chrome.tabs.onUpdated 也会针对 iframe 触发,如果页面包含许多 iframe,尽管您已检查,但每个完成的 iframe 都会触发事件:https://stackoverflow.com/a/36818991/2241806"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 2011-03-13
    • 2014-11-22
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多