有没有办法计算在 chrome 中打开的标签数量?

Ho *_* Ha 8 javascript google-chrome google-chrome-extension

我正在尝试找到一种方法来计算当前通过 javascript 在 Chrome 中打开的标签数量。

我已经搜索并找到了chrome.tabs.query()。但是当我打开我的控制台并尝试它时,我收到了一条未定义的消息。

是不是 Chrome 不再支持了,还是只能用于扩展开发?

Kam*_*ski 11

本地和会话存储

如果我们只想计算我们网站上的选项卡 - 首先在页面上load(打开选项卡)事件,我们会生成选项卡哈希并将其保存在 sessionStorage 中(不在选项卡之间共享)并作为TabsOpenlocalStorage 中对象的键(在选项卡之间共享) 。然后在事件页面unload(关闭选项卡)中,我们从 localStorage 中删除当前选项卡哈希(保存在 sessionStorage 中)TabsOpen

<!doctype html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <title>My project</title>
    ...
    <script>

        function tabLoadEventHandler() {
            let hash = 'tab_' + +new Date();
            sessionStorage.setItem('TabHash',hash);
            let tabs = JSON.parse(localStorage.getItem('TabsOpen')||'{}');
            tabs[hash]=true;
            localStorage.setItem('TabsOpen',JSON.stringify(tabs));
        }
        function tabUnloadEventHandler() {
            let hash= sessionStorage.getItem('TabHash');
            let tabs = JSON.parse(localStorage.getItem('TabsOpen')||'{}');
            delete tabs[hash];
            localStorage.setItem('TabsOpen',JSON.stringify(tabs));
        }
    </script>
    ...
</head>

<body onunload="tabUnloadEventHandler()" onload="tabLoadEventHandler()">
...
</body>

</html>
Run Code Online (Sandbox Code Playgroud)

由于TabsOpenlocalStorage 中的对象,我们获得了有关当前打开的选项卡的信息,可以通过以下方式读取这些信息

let tabsCount = Object.keys( JSON.parse(localStorage.getItem('TabsOpen')||'{}') ).length
Run Code Online (Sandbox Code Playgroud)


Mak*_*yen 6

正如wscourge 所暗示的那样chrome.tabs.query()是一个 Chrome 扩展 API,它只适用于扩展,而不适用于网页 JavaScript。事实上,它仅在扩展的后台上下文中可用(即不是内容脚本)。

要查找打开的选项卡数量,您可以执行以下操作:

chrome.tabs.query({windowType:'normal'}, function(tabs) {
    console.log('Number of open tabs in all normal browser windows:',tabs.length);
}); 
Run Code Online (Sandbox Code Playgroud)

如果您想从控制台运行它,您将需要加载一个具有后台页面的扩展程序。然后您需要打开后台页面的控制台。从该控制台,您可以执行上述代码。


unu*_*bar 5

我在这里找到了这个问题的答案:https : //superuser.com/questions/967064/how-to-get-tab-count-in-chrome-desktop-without-app-extension

chrome://inspect/#pages

在 javascript 控制台中运行以下代码行:

document.getElementById("pages-list").childElementCount
Run Code Online (Sandbox Code Playgroud)

标签计数将打印到控制台。


wsc*_*rge 3

它只能用于扩展开发。

您无法从document关卡访问该信息。