La détection de l'événement onload de la fenêtre ouverte avec fenêtre.ouvert
window.popup = window.open($(this).attr('href'), 'Ad', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0');
$(window.popup).onload = function()
{
alert("Popup has loaded a page");
};
Cela ne fonctionne pas dans n'importe quel navigateur, j'ai essayé avec (IE, Firefox, Chrome). Comment puis-je détecter lorsqu'une page est chargée dans la fenêtre (comme un iframe onload)?
- Je suppose que vous avez déjà le onLoad dans votre <BODY> quelque part?
- Supposons que je ne contrôle pas la page, c'est l'ouverture de la popup
- Qu'essayez-vous de le faire avec
$(...).onload
là? Quel est le problème avec justewindow.popup.onload
? - ^ c'est probablement ce qui est mal avec elle en fait.. EDIT: yep..qu'il fixe, mais pas pour le cross-domain
Vous devez vous connecter pour publier un commentaire.
Si le pop-up du document à partir d'un domaine différent, ce n'est tout simplement pas possible.
Mise à jour avril 2015: je me suis trompé à ce sujet: si vous possédez les deux domaines, vous pouvez utiliser
window.postMessage
etmessage
événement dans à peu près tous les navigateurs qui sont pertinents aujourd'hui.Si pas, il n'y a encore aucun moyen que vous serez en mesure de faire ce travail de la croix-navigateur, sans l'aide du document chargé dans la fenêtre pop-up. Vous devez être en mesure de détecter un changement dans la fenêtre pop-up qui se produit une fois qu'il a chargé, ce qui pourrait être une variable JavaScript dans le menu en haut de page lors qu'il gère son propre
load
de l'événement, ou si vous avez un certain contrôle de ce que vous pourriez ajouter un appel à une fonction dans le premier match.Si vous vous souciez c'est à dire, utiliser la suite de la deuxième ligne à la place:
Comme vous pouvez le voir, le soutien IE est assez lourd et doit être évitée si possible. Je veux dire, si vous avez besoin de soutien IE à cause de votre public, par tous les moyens, de le faire.
De noter que cette réponse est https://stackoverflow.com/a/3030893 aka La détection de l'événement onload de la fenêtre ouverte avec fenêtre.ouvert solution est idéale:
Cependant, d'autres observations et réponses perpétrer plusieurs idées fausses, erronées, comme expliqué ci-dessous.
Le script suivant montre le tempérament temporelles de l'inconstance de la définition de
onload
. Appliquer le script pour un chargement rapidelocation.href
commefile:///
et une certaine lenteur du site pour voir le problème. Il est possible de voironload
message ou pas du tout (par le rechargement d'une page chargée en tous les 3 variations peuvent être vus). Il est également supposé que la page en cours de chargement lui-même ne définit pas unonload
événement qui ne ferait qu'aggraver le problème.La
onload
's gestionnaire d'événement définitions sont certainement pas "à l'intérieur du popup balisage HTML", bien qu'ils réside finalement dans le DOM de labody
... de laHTML
.ce que vous pouvez faire:
javascript: ...
URIil héritera du même site les politiques comme les étrangers URL
NB. le javascript peut-être besoin d'être mis en signet comme un bookmarklet depuis la barre d'adresse URI
javascript:
's ne sont pas efficaces dans récente (vers 2012) les navigateursle script est manuellement entré dans des endroits
Ainsi toute la page, enfin presque, indépendamment de l'origine, peut être modifié comme:
(enfin presque ...
jar:file:///usr/lib/firefox/omni.ja!/chrome/toolkit/content/global/aboutSupport.xhtml
Mozilla FF page de résolution des problèmes et d'autres
jar
archives sont des exceptions)Comme un autre exemple:
Régulièrement désactiver google usurpation de la cible pg. hits, le changement c'est
rwt
fonction comme suit:et mettre en signet ce que
spay google
(neuteralize google
?) c'est à dire. c'est "fixe".Ce signet est ensuite cliqué avant tout
google
hits cliqué, alors les signets de l'une de ces hits sont propres et pas le mongrelized pervers des aberrations quegoogle
faite.tests effectués avec
Il convient de noter que
addEventListener
dans Mozilla n'a qu'une non-standard quatrième paramètre booléen qui, sitrue
permet à un contenu non approuvé déclenche à être instancié pour les pages étrangères.ref:
de l'élément.la méthode addEventListener | Modèle d'Objet de Document (DOM) | MDN:
L'Interaction entre les privilégiés et non-privilégiés pages | extraits de Code | MDN:
Signet:
La détection de l'événement onload de la fenêtre ouverte avec fenêtre.ouvert
share
à un lien posté réponse à cette question -, il aurait été mieux ... fait! ...ow
! (S stylo L indow ou devrait-il êtrefunction(ouch)
, un jeu de mots en référence à la non traitée condition d'erreur dans le 1er exemple!) la prose est assez pointu, si l'écriture ça fait mal puis le lire...!Cela a fait l'affaire pour moi; exemple complet:
HTML:
Javascript:
onload
gestionnaire d'événement doit être à l'intérieur du popup HTML<body>
balisage.$(popup).find('body').attr('onload', 'window.print();');
travaillé à la fin.Le cœur du problème semble être que vous ouvrez une fenêtre d'affichage d'une page dont le contenu est déjà mis en cache dans le navigateur. Donc pas de chargement qui se passe et, par conséquent, aucune charge d'événement se produit.
Une possibilité serait d'utiliser le "pageshow' -événement au lieu de cela, comme décrit dans:
https://support.microsoft.com/en-us/help/3011939/onload-event-does-not-occur-when-clicking-the-back-button-to-a-previou