fenêtre.onbeforeunload ne fonctionne pas sur l'iPad?
est-ce que quelqu'un sait si l'événement onbeforeunload
est supporté sur l'iPad et/ou s'il y a une autre façon de l'utiliser?
j'ai presque tout essayé, et il semble que l'événement onbeforeunload
ne soit jamais déclenché sur l'iPad (navigateur Safari).
spécifiquement, c'est ce que j'ai essayé:
-
window.onbeforeunload = function(event) { event.returnValue = 'test'; }
-
window.onbeforeunload = function(event) { return 'test'; }
- (les deux ci-dessus ensemble)
-
window.onbeforeunload = function(event) { alert('test')'; }
- (toutes les fonctions ci-dessus mais à l'intérieur de
<body onbeforeunload="...">
tous ces travaux sur FF et Safari sur le PC, mais pas sur l'iPad.
aussi, j'ai fait ce qui suit juste après avoir chargé la page:
alert('onbeforeunload' in window);
alert(typeof window.onbeforeunload);
alert(window.onbeforeunload);
respectivement, les résultats sont:
-
true
-
object
-
null
donc, le navigateur a la propriété, mais pour une raison quelconque, il ne se fait pas tirer.
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? J'avais apprécions toute entrée.
Merci
7 réponses
j'ai trouvé que le onunload() événement n'feu. Son comportement est quelque peu étrange; ce que vous avez dans votre fonction de rappel attachée à l'événement est en fait lancé après que la nouvelle page a été chargée en arrière-plan (vous ne pouvez pas dire qu'elle est chargée encore, mais la journalisation du serveur montrera qu'elle l'est).
de façon plus étrange, si vous avez un appel de confirm() dans votre onunload(), et que l'Utilisateur a cliqué sur un lien pour aller ailleurs, vous êtes en affaires. Toutefois, si l'utilisateur ferme la dans l'onglet du navigateur Safari iPad, l'événement onunload() se déclenchera, mais votre confirm () aura une réponse implicite d'annulation.
ce morceau de JavaScript fonctionne pour moi sur Safari et Chrome sur ipad et iphone, ainsi que desktop/laptop / autres navigateurs:
var isOnIOS = navigator.userAgent.match(/iPad/i)|| navigator.userAgent.match(/iPhone/i);
var eventName = isOnIOS ? "pagehide" : "beforeunload";
window.addEventListener(eventName, function (event) {
window.event.cancelBubble = true; // Don't know if this works on iOS but it might!
...
} );
seule Apple le saurait à coup sûr, mais je suppose qu'ils n'ont pas volontairement activé cette fonctionnalité dans le Safari mobile parce qu'il est le plus souvent utilisé par des personnages louches pour vous faire rester sur leur site ou pop up lots 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 soit fait à partir d'une version de WebKit qui n'a pas le correctif.
https://code.google.com/p/chromium/issues/detail?id=97035
voir, entendre.
Les alertesne sont plus autorisées lors d'événements de renvoi de page (avant téléchargement, déchargement, peau de page).
je pense que les alertes, invite, confirmer, et d'autres actions comme celles-ci ne sont plus autorisés.
beforeunload n'est pas supporté par Mobile Safari. Vous pouvez voir la liste de tous les événements pris en charge ici: gestion des événements Apple documentation
Et le beforeunload n'est pas dans la liste!
si vous avez juste besoin de savoir si la page a été laissée, vous pouvez utiliser document.unload
. Il fonctionne très bien dans les navigateurs ios. Si vous voyez sur Apple documentation vous trouverez qu'il est déprécié et ils recommandent d'utiliser le document.pagehide