javascript - JavaScript 标签数量
问题描述
有没有办法检查用户是否打开了多个选项卡(不是全局的,仅在我的网站上)或者用户打开了多少个选项卡?在最好的情况下,我需要数量,但布尔值就足够了。我需要一个没有 jQuery 或其他东西的 vanilla JavaScript (ES6) 解决方案。
先感谢您。
解决方案
您可以为每个打开的选项卡创建一个 ID,并将其保存在一个数组中localStorage
(document.cookie
也可以,但需要更多的努力来获取和设置):
var tabId = Math.random();
var tabs = JSON.parse(localStorage.getItem('tabs')) || [];
tabs.push(tabId);
localStorage.setItem('tabs', JSON.stringify(tabs));
现在,要检查我们在当前域上打开了多少个选项卡,我们检查tabs
localStorage 中数组的长度:
function getTabCount()
{
return JSON.parse(localStorage.getItem('tabs')).length;
}
现在,您可以使用getTabCount()
来获取当前打开的选项卡的数量。
最后,我们需要确保我们的 tabId 在我们关闭它时从数组中删除:
window.addEventListener('beforeunload', function(e)
{
tabs = JSON.parse(localStorage.getItem('tabs'));
var index = tabs.indexOf(tabId);
if (index !== -1)
tabs.splice(index, 1);
localStorage.setItem('tabs', JSON.stringify(tabs));
});
请记住,您需要继续使用getTabCount()
以检查自上次使用以来是否打开或关闭了任何选项卡。
推荐阅读
- javascript - 将 JsonArray 转换为 JsonObject Jquery
- javascript - Discord.js的WebStorm错误类型注释
- windows-10 - RDP 问题!提示输入用户名和密码
- scala - 如何为同一项目中的多个 Spark 应用程序指定不同的 log4j.properties 文件
- bazel - Bazel:在 genrule 中引用输出目录中的文件
- python - 无法使用 xpath 使用 selenium 选择元素
- python - 无法通过 POST [Python] 发送登录凭据
- karate - 我们可以使用空手道加特林在同一个包中运行多个功能文件吗
- javascript - 为什么 Typescript 中的集合在 Firebase 中更新两次?
- angularjs - 离子 EPERM:不允许操作,复制文件