Pour chrome, l'événement se déclenche au chargement de la page, mais dans Firefox, il se déclenche à droite, uniquement lorsque vous appuyez sur le bouton Précédent ou Suivant. Alors, comment écrire un script qui fonctionne bien pour tous les navigateurs?Quelle est la façon idéale de gérer window.onpopstate pour tous les navigateurs?
Répondre
Je voudrais aller la détection du navigateur sur celui-ci (en fait, je l'ai fait). J'utilise le .data de jquery() pour définir un indicateur booléen pour effectuer le test:
// chrome fires a popstack event on page load, so do a check before proceeding
var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
if(is_chrome && !$('body').data('allow-popstate-action')) {
$('body').data('allow-popstate-action', true);
return false;
}
J'ai ajouté cette clause conditionnelle dans la fonction qui est lié à l'événement popstate, donc la première fois qu'il est appelé à Chrome (qui est en chargement de la page), il quitte simplement la fonction sans rien faire. La prochaine fois (boutons prev/back), cela fonctionnera bien.
Je suis coincé avec une ancienne version de jQuery sur ce projet, donc je ne pouvais pas utiliser jQuery.browser.webkit, mais vous pouvez probablement.
Une manière légèrement plus élégante consiste à ajouter un délai de 1ms avant d'ajouter l'écouteur popstate. Puisque le popstate initial se déclenchera avant que tout code asynchrone ne soit exécuté, votre fonction popstate fonctionnera correctement (uniquement pour les actions avant/arrière):
window.setTimeout(function(){
$(window).on('popstate', function(event){
// do things
});
}, 1);
- 1. Essayer de gérer la fonction window.onpopstate
- 2. Quelle est la meilleure façon de gérer les images cassées?
- 3. Quelle est la meilleure façon de gérer les exceptions ObjectDataSource?
- 4. Quelle est la meilleure façon de savoir quels éléments CSS sont supportés par tous les navigateurs?
- 5. Quelle est la meilleure façon de gérer les écrans Retina?
- 6. Quelle est la meilleure façon de gérer les exceptions JMS
- 7. Quelle est la meilleure façon de gérer les chaînes temporaires?
- 8. Quelle est la bonne façon de gérer les erreurs?
- 9. Quelle est la bonne façon de gérer les extensions d'image?
- 10. Quelle est la bonne façon de gérer la version d'assemblage?
- 11. Découvrez quelle est la taille de bloc idéale pour SWAP?
- 12. Quelle est la bonne façon de gérer plusieurs requêtes ajax?
- 13. Quelle est la meilleure façon de gérer content_type dynamique Sinatra
- 14. Quelle est la meilleure façon d'initier/créer le xmlhttprequest (pour qu'il fonctionne dans les principaux navigateurs)?
- 15. Quelle est la meilleure façon de gérer mes licences logicielles?
- 16. quelle est la meilleure façon d'avoir une image se chevauchent une autre sur une page html pour tous les navigateurs
- 17. Quelle est la meilleure façon de gérer Multi-instance Properties.Settings.Default.Save()
- 18. Quelle est la meilleure façon de gérer les UDID iOS pour les distributions ad hoc client?
- 19. Quelle est la bonne façon de gérer plusieurs redirections automatiques?
- 20. Quelle est la bonne façon de gérer l'asynchronicité dans nodeunit?
- 21. Python: quelle est la bonne façon de gérer json gzippé?
- 22. quelle est la structure de répertoire idéale d'une application ruby
- 23. Quelle est la bonne façon de gérer FB.Event.subscribe?
- 24. Quelle est la bonne façon de gérer comprennent serlvet
- 25. Object.watch() pour tous les navigateurs?
- 26. Quelle est la meilleure façon de gérer les images de blog pour le Web mobile?
- 27. Quelle est votre façon préférée de gérer le développement multiplateforme?
- 28. Quelle est la bonne façon de gérer les actifs d'image pour J2ME dans NetBeans
- 29. Quelle est la meilleure façon de gérer les variables en mémoire pour Javascript?
- 30. Quelle est la bonne façon de gérer les rotations d'image pour iPhone/iPad?