2009-10-21 11 views
12

Disons que j'ai deux pages. L'un d'eux en contient un autre à l'intérieur comme iframe. Si vous vous abonnez à l'événement onbeforeunload sur la page parente, cet événement ne se déclenche pas si vous fermez l'onglet lorsque iframe est actif. Je suppose que c'est un bug comme écrit ici: Google Chrome issuesGoogle chrome onbeforeunload comportement incorrect avec iframe

Mais j'ai mentionné que, par exemple, google docs gérer cette situation. Quelqu'un peut-il me donner une solution? Notez que je n'ai aucun accès réel au contenu iframe car il s'agit d'un éditeur html tiers (WYSIWYG).

+0

avez-vous essayé de vous inscrire à l'événement iframes onbeforeunload? – barkmadley

+0

Oui. Cependant, cela ne prend aucun effet. – Vetragon

+0

Quelqu'un at-il une mise à jour à ce sujet? – Chris

Répondre

4

Je sais qu'il est une vieille question, mais juste pour aider les gens qui viennent ici par la recherche:

Le bug est fixed by now here.

Depuis le chrome 10, le problème devrait être résolu.

Il existe un related bug though here.

Donc, en bref, si vous toujours pas en mesure de feu « onbeforeunload » sur des cadres, il pourrait être dû au changement dans le contenu via JavaScript comme document.opendocument.writedocument.close etc.

0

le code ci-dessous fonctionnera sur tous les navigateurs

if (typeof window.addEventListener != 'undefined') { 
    window.addEventListener('beforeunload', test, false); 
} 
else if (typeof document.addEventListener != 'undefined') { 
    document.addEventListener('beforeunload', test, false); 
} 
else if (typeof window.attachEvent != 'undefined') { 
    window.attachEvent('onbeforeunload', test); 
} 

else { 
    if (typeof window.onbeforeunload == 'function') { 
     window.onbeforeunload = function() { 
      test(); 
     }; 
    } 
    else { 
     window.onbeforeunload = test; 
    } 
} 

function test(){ alert('working');} 

essayer cette fois ...

+3

Cela ne fonctionne toujours pas sur les versions récentes de Chrome (juste essayé 18.0). –

+1

Toujours pas de travail pour moi non plus dans Chrome v40 – spyter

0

Vous pouvez également essayer de changer l'URL de iframe à "about: blank", par exemple:

$("#myFrameId")[0].src = "about:blank"; 

Il force le chrome à fermer "proprement" la fenêtre contournée dans l'iframe. Juste pour mentionner: si vous voulez fermer seulement votre iframe mais pas la fenêtre parente, vous devez donner assez de temps à chrome pour exécuter le gestionnaire que vous avez attaché à 'onbeforeunload'.