Un moyen d'identifier l'onglet Navigateur dans JavaScript?
je dois être en mesure d'identifier quel onglet je suis dans le navigateur. N'est-il pas quelque peu d'information que je peux obtenir à partir du navigateur pour identifier l'onglet? Je n'ai pas besoin de savoir quoi que ce soit sur les autres onglets, j'ai juste besoin d'une identification pour l'onglet dans lequel je suis. Il pourrait être aléatoire ou séquencés nombre ou une date-heure d'impression, tant qu'il reste le même pour la vie de l'onglet.
j'ai une application côté client qui fait une connexion BOSH sur HTTP à un serveur distant, et si je ouvrez - le dans plusieurs onglets, chaque instance a besoin de son propre id unique ou l'application échoue, donc j'ai juste besoin d'un numéro unique qui est associé à l'onglet aussi longtemps que cet onglet existe (i.e. quelque chose qui survit rafraîchir la page que je navigue le site qui fournit cette application). Semble comme une évidence qui devrait être disponible dans le navigateur, comme la fenêtre.tabId - c'est tout ce dont j'ai besoin. J'ai un sérieux problème de développement parce que je ne peux pas passer cette solution simple, simple, simple qui ne semble pas exister. Il doit y avoir un moyen (une solution de navigateur).
des idées?
7 réponses
SessionStorage est par onglet / fenêtre, de sorte que vous pouvez définir un nombre aléatoire dans sessionStorage et l'obtenir en premier si existe:
var tabID = sessionStorage.tabID ? sessionStorage.tabID : sessionStorage.tabID = Math.random();
mise à JOUR :
Dans certains cas, vous pouvez avoir la même sessionStorage dans l'onglet multiple (par exemple lorsque vous dupliquez l'onglet). Dans ce cas, le code suivant peut être utile:
var tabID = sessionStorage.tabID && sessionStorage.closedLastTab !== '2' ? sessionStorage.tabID : sessionStorage.tabID = Math.random();
sessionStorage.closedLastTab = '2';
$(window).on('unload beforeunload', function() {
sessionStorage.closedLastTab = '1';
});
vous devez utiliser html5, mais sessionStorage combiné avec un guid aléatoire semble être ce que vous voulez.
vous ne pouvez pas obtenir l'ID d'onglet avec javascript, cependant il y a une solution qui peut vous aider avec comme l'utilisation de différentes sessions / cookies lorsque l'utilisateur ouvre le nouvel onglet.
Certains la référence:
Get Du Navigateur Onglet Index/Id
obtenir l'url de firefox onglets de firefox extension
Comment diffèrent des sessions de navigateur onglets?
obtenez une session unique dans chaque onglet de navigateur
asp.net -session-plusieurs onglets de navigateur - différentes sessions?
L'une des solutions possibles est d'utiliser" fenêtre.nommez " propriété, mais je ne veux pas l'utiliser parce que quelqu'un d'autre peut l'utiliser.
j'ai trouvé une autre solution possible: utiliser sessionStorage. Elle est soutenue par FF3.5+, Chrome4+, Safari4+, Opera 10.5+, et IE8+.
S'il n'y a aucune chance qu'un utilisateur ouvre 3 onglets en 2 millisecondes, il peut utiliser un horodatage et le stocker dans window.nommez-le et utilisez-le comme la clé dans votre recherche. La fenêtre.la valeur du nom restera avec l'onglet jusqu'à ce qu'il soit fermé.
puisque je n'ai pas trouver de fonction Javascript simple comme windows.currentTabIndex
, j'ai écrit quelques lignes de Javascript pour fixer un ID sur chaque onglet de navigateur quand ils sont chargés.
function defineTabID()
{
var iPageTabID = sessionStorage.getItem("tabID");
// if it is the first time that this page is loaded
if (iPageTabID == null)
{
var iLocalTabID = localStorage.getItem("tabID");
// if tabID is not yet defined in localStorage it is initialized to 1
// else tabId counter is increment by 1
var iPageTabID = (iLocalTabID == null) ? 1 : Number(iLocalTabID) + 1;
// new computed value are saved in localStorage and in sessionStorage
localStorage.setItem("tabID",iPageTabID);
sessionStorage.setItem("tabID",iPageTabID);
}
}
ce code enregistre l'index du dernier onglet dans localStorage
pour mettre à jour la valeur actuelle pour les nouveaux onglets et dans sessionStorage
pour corriger l'id de la page !
je dois appeler la fonction defineTabId()
dans chaque page de ma demande. Depuis que je développe en utilisant un JSF templates, ce n'est que défini en un seul endroit: -)
au moins pour chrome, il y a une réponse officielle depuis 2013: chrome.les onglets de l'API .