de la fenêtre.onbeforeunload ne fonctionne pas sur l'iPad?
Personne ne sait si le onbeforeunload
événement est pris en charge sur l'iPad et/ou si il y a une autre façon de l'utiliser?
J'ai essayé un peu tout, et il semble que le onbeforeunload
événement n'est jamais déclenchée sur l'iPad (navigateur Safari).
Plus précisément, c'est ce que j'ai essayé:
window.onbeforeunload = function(event) { event.returnValue = 'test'; }
window.onbeforeunload = function(event) { return 'test'; }
- (les deux ensemble)
window.onbeforeunload = function(event) { alert('test')'; }
- (toutes les fonctions ci-dessus, mais à l'intérieur de
<body onbeforeunload="...">
L'ensemble de ces travaux sur le FF et Safari sur le PC, mais pas sur l'iPad.
Aussi, j'ai fait le code suivant juste après le chargement de la page:
alert('onbeforeunload' in window);
alert(typeof window.onbeforeunload);
alert(window.onbeforeunload);
Respectivement, les résultats sont les suivants:
true
object
null
Ainsi, le navigateur n'ont la propriété, mais pour quelque raison il ne veut pas me faire virer.
Les moyens que j'essaie de naviguer loin de la page en cliquant sur les boutons précédent et suivant, en faisant une recherche google dans la barre du haut, en changeant l'emplacement dans la barre d'adresse, et en cliquant sur un signet.
Quelqu'un a une idée sur ce qui se passe? Je serais grandement apprécier toute entrée.
Grâce
- Merci à vous deux pour vos commentaires. Il doit être l'une des raisons que vous avez mentionnées. Malheureusement, il n'y a pas de documentation officielle d'Apple à ce sujet et d'autres limitations. J'espère qu'ils vont trouver une façon plus créative de l'activation de cette fonction, tout en empêchant l'utilisation malveillante d'elle. J'entends souvent dire que les gens accidentellement appuyez sur à partir de la page et de perdre toutes les données saisies dans un formulaire.
- Avez-vous essayé d'utiliser
addEventListener()
? - Je suis sûr que
beforeunload
ne fonctionne pas sur Safari sur iOS. 🙁 Peut-être pas ce que vous cherchez, mais j'ai une suggestion pour de manière fiable test pour un travailbeforeunload
- Sur Mar 3'16, La
window.onbeforeunload = function(event) { event.returnValue = 'test'; }
ne fonctionne pas sur Chrome et Safari iOS 9.2.1 . J'aime vraimentonbeforeunload
Parce que la page ne change pas, si je clique sur annuler. - Semble que ce problème a été résolu dans Safari et iOS 13
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé que le onunload() événement n'feu. Il a un comportement un peu étrange; tout ce que vous avez dans votre fonction de rappel attaché à l'événement est exécuté après la nouvelle page est chargée dans le fond (Vous ne pouvez pas dire qu'il est encore chargé, mais la connexion au serveur sera de montrer que c'est le cas).
Plus étrangement, si vous avez un confirm() appel dans votre onunload(), et l'utilisateur a cliqué sur un lien pour aller quelque part d'autre, vous êtes dans les affaires. Toutefois, si l'utilisateur ferme le Safari iPad onglet de navigateur, le onunload() événement se déclenche, mais votre confirm() aura un implicite annuler la réponse.
unload
événement dépréciée en faveur depagehide
voir developer.apple.com/library/ios/documentation/AppleApplications/...Ce peu de JavaScript fonctionne pour moi sur Chrome et Safari sur ipad et iphone, ainsi que de bureau/ordinateur portable/d'autres navigateurs:
return 'test';
similaire à celle par l'op n'est pas de travail..Seulement Apple ne sais pour sûr, mais je pense qu'ils ont fait exprès de ne pas activer cette fonctionnalité dans le navigateur Safari mobile, car il est le plus souvent utilisé par des personnages louches pour vous inciter à rester sur leur site ou pop-up beaucoup de porno/fenêtres publicitaires.
Il y a un bug connu dans WebKit avec onbeforeunload. Je crois que c'est corrigé dans la dernière version bêta de Chrome 5, mais il est tout à fait possible que le navigateur de l'iPad est faite à partir d'une version de WebKit qui n'ont pas la corriger.
Liées Chrome rapport de bug.
beforeunload événement n'est pas pris en charge par le navigateur Safari Mobile. Vous pouvez voir la liste de tous les événements pris en charge ici: La gestion des Événements dans la documentation d'Apple
Et la beforeunload n'est pas dans la liste!
https://code.google.com/p/chromium/issues/detail?id=97035
voir entendre.
Je pense que les alertes, l'invite, confirmez, et d'autres actions comme celles-ci ne sont plus autorisés.
Si vous avez juste besoin de savoir si la page a été laissée de côté, vous pouvez utiliser
document.unload
. Il fonctionne bien dans les navigateurs ios. Si vous voyez sur La documentation d'Apple vous trouverez qu'il est obsolète, et ils recommandent d'utiliser document.pagehidedocument.pagehide
fonctionne bien pour moi, merci!Voici une solution qui devrait fonctionner sur tous les navigateurs modernes:
Les navigateurs mobiles n'ont pas tendance à ne pas appuyer
beforeunload
parce que le navigateur peut aller dans l'arrière-plan, sans déchargement de la page, puis être tué par le système d'exploitation à tout moment.La plupart des navigateurs de bureau contient un bug qui provoque
visibilityState
à pas appelée lorsque le document de décharge. Voir: ici.Par conséquent, il est important d'inclure à la fois des événements à couvrir tous les scénarios.
NB
J'ai utilisé
console.log
au lieu dealert
dans mon exemple parcealert
sera obstrué par certains navigateurs, lorsqu'il est appelé à partir debeforeunload
ouvisibilitychange
.