2012-05-21 4 views
0

J'ai une application où j'ai des onglets où chaque onglet représente une sous-application particulière. Je voudrais avoir tous les liens tels que site.com/* pour ouvrir dans un onglet de navigateur déjà existant, et en quelque sorte éventuellement déclencher un événement JavaScript qu'un nouveau lien a été reçu/ouvert afin que je puisse l'ouvrir dans mon application à la place. Donc, en gros, je construis une application web et j'aimerais que les liens s'ouvrent dans la même instance d'application plutôt que de créer plusieurs instances de mon application.Est-il possible d'avoir un navigateur ouvrir un lien dans un site web déjà ouvert?

Est-ce possible?

Mise à jour: Je parle si quelqu'un envoie un lien sur Skype ou par e-mail, que les liens s'ouvriraient dans mon application. Je suis conscient de la plupart des technologies web et je ne peux penser à aucune approche, c'est pourquoi j'ai laissé cette question si quelqu'un pouvait avoir une idée. Ou un plugin, sinon, un jour nous pourrions en avoir un et j'ajouterai la réponse à ma propre question/mise à jour.

Répondre

1

Oui. Utilisez simplement le target attribute des liens pour les ouvrir dans leur contexte de navigation de sous-application (onglet, fenêtre).

Aucun événement ne se déclenche à l'ouverture des liens. Vous pouvez ajouter un gestionnaire d'événements click à tous les liens, en exécutant ce dont vous avez besoin lorsque l'URL correspond.


Si vous voulez vous voulez que votre application Web ouvre des protocoles spécifiques ou des types MIME, même cela est possible avec HTML5. Vous pouvez utiliser window.navigator.registerProtocolHandler() et window.navigator.registerContentHandler(). Voir le HTML5 Draft on Custom scheme and content handlers.

Si un utilisateur ouvre un nouvel onglet/fenêtre pour un lien qu'il a reçu par e-mail, etc., vous ne pouvez généralement pas l'attraper et l'empêcher. Mais vous pouvez utiliser Cross-document messaging, par ex. window.postMessage, pour voir si votre application est déjà ouverte quelque part dans le navigateur, puis fermez un onglet et concentrez-vous sur l'autre.

+0

Mise à jour de la question. Désolé si j'étais trompeur, je parle de liens qui s'ouvrent via Skype ou par e-mail. :) – Tower

+0

pouvez-vous expliquer comment fonctionne la messagerie inter-documents exactement. Je veux dire, 'window.postMessage()' est simple, mais comment puis-je trouver la référence à l'autre 'fenêtre' à qui parler? C'est simple si les pages sont sur le même document, mais dans des iframes différentes. Cependant, dans mon cas, les liens du courrier électronique s'ouvrent sur un tout nouvel onglet, comment fonctionne la messagerie inter-documents dans ce scénario? – Tower

+0

Oh, vous avez raison. Je ne connais aucun moyen d'obtenir cette référence. Ensuite, je ne peux penser à la communication en changeant cookies/sessionStorage, et en interrogeant pour les changements de l'autre côté. – Bergi

Questions connexes