7
votes

Comment amener Firefox pour déclencher l'événement POPSTATE lorsque vous revenez d'une page sur un domaine différent?

J'ai une page Web simple, à savoir:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>History hacks</title>
<script>
window.onpopstate = function (e) {
    alert("location: " + document.location + ", state: " + JSON.stringify(e.state));
}
window.onload = function (e) {
    alert('page loaded');
}
</script>
</head>
<body>
<p> <a href="http://www.yahoo.com">Yahoo</a> <a href="#part1">Part 1</a></p>
</body>
</html>


0 commentaires

4 Réponses :


2
votes

Vous recherchez probablement la page PagesHow Si vous souhaitez être averti lorsque votre page est affichée lors de la remise même si elle a été mise en cache dans le cache de la page.

Notez que s'il n'y a pas d'événement de charge qui signifie également que la page a toujours exactement le même environnement d'exécution de DOM et d'exécution de script lorsqu'il a été navigué loin de. Fondamentalement, c'est comme si l'utilisateur a commuté les onglets pendant un certain temps, par opposition à la navigation.

Donc, étant donné que, voulez-vous toujours obtenir un événement dans cette situation? Avez-vous des événements que vous recherchez lorsque l'utilisateur se retourne sur l'onglet avec votre page?


0 commentaires

11
votes

Pour obtenir un «code> POPSTATE CODE> Evénement lorsque la touche Retour (ou Transférer) est utilisée pour accéder à la charge de la page initiale, utilisez remplacement () code> comme xxx

Pour ignorer le POPSTATE INITIAL POPSTAT CODE> que Chrome génère lorsque la page est chargée, vous pouvez marquer l'état chaque fois que vous appelez pushstate code> / remplacer code >, par exemple p> xxx pré>

alors votre POPSTATE code> Handler Just Filtres pour MyTag code> P>

window.onunload = function(e) { }


4 commentaires

C'est une excellente réponse pour expliquer comment faire fonctionner l'histoire de l'histoire de la même plate-forme croisée, mais elle ne répond pas à la question de l'OP: Comment savoir si l'utilisateur a effectivement cliqué sur "Retour" pour finir sur la page. Utilisation de votre exemple, vous pouvez dire que l'utilisateur a cliqué sur Chrome et Safari car MyTag ne sera pas nulle dans le gestionnaire de l'OnpOpstate. Cependant, dans Firefox, onpopstate n'est pas appelé, il semble donc y avoir aucun moyen de déterminer si l'utilisateur retourne à la page ou s'il s'agit d'une première visite. Il y a donc un moyen de distinguer cela dans Firefox?


@Karma: Si vous désactivez le BFCACHACHE (voir la dernière partie de ma réponse), Firefox devrait se comporter de manière similaire à Chrome. Mais Lisez la réponse de Boris Zbarsky pour une belle illustration de la raison pour laquelle vous devriez préférer le cache de la page de Firefox au comportement de Chrome.


Merci @sean Hogan. Après une lecture sur Firefox Bfcaching, j'ai réalisé qu'il ne fonctionne pas sur mon site car nous utilisons HTTPS. Firefox rafraîchit toujours la page. Je suppose qu'il n'y a rien que je puisse faire à ce sujet.


@KARMA: Je ne savais pas à propos de HTTPS. Merci pour le conseil.



0
votes

Avant de décharger, je rechargez ma page (pour obtenir le statut initial), puis définissez la nouvelle HREF

p>

"Faux">
window.onunload = function(e) {
  location.reload();
  location.href = **new_url** ;
}


0 commentaires

0
votes

J'ai eu la même question et j'ai dû creuser des spécifications pour comprendre pourquoi l'événement de POPSTATE ne tire pas dans aucun navigateur lorsque le bouton Retour est utilisé pour revenir d'une page sur différents domaines. Il s'avère que le capstatif ne devrait pas tirer dans ce cas l'état de Document modifié n'est pas vrai et que le fluctuateur ne devrait tirer que si l'état changé est vrai. Pour l'état modifié pour être défini sur True Spec dit:

State a changé être vrai si le document de l'entrée spécifiée a une dernière entrée et que l'entrée n'est pas l'entrée spécifiée; sinon laissez-le être faux.

Ma compréhension est que lorsque nous reviendrons sur notre page à partir d'une page dans différents domaines, notre page n'a aucune dernière entrée depuis que le document a changé et que le nouveau document n'a pas encore d'entrée. À nouveau de la spécification:

Chaque document dans un contexte de navigation peut également avoir une dernière entrée. C'est l'entrée de ce document à laquelle l'historique des sessions du contexte de navigation a été découvert récemment. Lorsqu'un document est créé, il n'a initialement pas la dernière entrée.

Cependant, il existe toujours un moyen de voir si l'utilisateur est revenu sur votre page en définissant un drapeau de l'historique.state de votre page à l'aide de la poussée de l'historique ou de remplacer les méthodes et vérifiant l'existence de ce drapeau dans l'historique.State à la page Load .

Pour plus lire dans HTML HTML de Whawg La pièce traitant de l'événement POPSTATE: https://html.spec.whatwg.org/multipage/browser.html # Histoire - Traversal


0 commentaires