我正试图找到一种方法来计算当前在Chrome中通过javascript打开的多个标签。
我搜索过chrome.tabs.query()
。但当我打开我的控制台并尝试它时,我得到了一个未定义的消息。
Chrome不再支持它,还是只能用于扩展程序开发?
答案 0 :(得分:2)
它只能用于扩展开发。
您无法从document
级别访问该信息。
答案 1 :(得分:2)
作为wscourge has implied,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);
});
如果要从控制台运行此程序,则需要加载具有后台页面的扩展程序。然后,您需要打开the console for the background page。从该控制台,您可以执行上述代码。
答案 2 :(得分:1)
我在这里找到了此问题的答案: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
选项卡计数将打印到控制台。
答案 3 :(得分:1)
首先在页面load
(打开标签)事件中,我们生成标签哈希,然后将其保存在sessionStorage(在标签之间不共享)中,并作为localStorage(在标签之间共享)的TabsOpen
对象中的键)。然后,在事件页面unload
(关闭标签)中,我们从localStorage中的TabsOpen
中删除当前标签哈希(保存在sesionStorage中)。
<!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>
由于在localStorage的TabsOpen
对象中,我们获得了有关当前打开的标签的信息,这些信息可由
let tabsCount = Object.keys( JSON.parse(localStorage.getItem('TabsOpen')||'{}') ).length