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

72
demandé sur Moritz 2010-07-13 21:38:58

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.

15
répondu Danny Armstrong 2011-01-28 02:14:51

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!
    ...
} );
8
répondu Danger 2015-07-07 20:01:24

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.

4
répondu Charles Boyung 2010-07-14 16:53:47

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.

Liées Chrome rapport de bug .

3
répondu Joel Mueller 2010-07-14 17:36:44

https://code.google.com/p/chromium/issues/detail?id=97035

voir, entendre.

Les alertes

ne 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.

2
répondu zelda.j 2015-01-09 07:05:24
L'événement

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!

2
répondu Julien Bachmann 2015-05-07 13:08:29

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

1
répondu Miquel 2014-10-04 13:57:20