En supposant que je n'ai aucun contrôle sur le contenu de l'iframe, y a-t-il un moyen de détecter un changement de src via la page parent? Une sorte de chargement peut-être?
Mon dernier recours est de faire un test d'intervalle d'une seconde si l'iframe src est le même qu'avant, mais faire cette solution de piratage serait nul.
J'utilise la bibliothèque jQuery si cela aide.
javascript
jquery
iframe
onload
Matrym
la source
la source
src
propriété changera-t-elle lorsqu'un lien dans l'iframe est cliqué? Je ne suis pas sûr de cela - si je devais deviner, je dirais "non". Il existe des moyens de surveiller les propriétés (dans Firefox au moins AFAIK) mais je ne suis pas sûr que cela soit utile dans ce cas.src
attribut dans le DOM ne change pas dans les dernières versions de FireFox ou de Safari. La réponse de @ Michiel ci-dessous est aussi bonne que j'ai pu aller jusqu'à présent.Réponses:
Vous souhaiterez peut-être utiliser l'
onLoad
événement, comme dans l'exemple suivant:L'alerte apparaîtra chaque fois que l'emplacement dans l'iframe change. Il fonctionne dans tous les navigateurs modernes, mais peut ne pas fonctionner dans certains navigateurs très anciens comme IE5 et les premiers Opera. ( Source )
Si l'iframe affiche une page dans le même domaine du parent , vous pourrez accéder à l'emplacement avec
contentWindow.location
, comme dans l'exemple suivant:la source
this.contentWindow.location.href
j'obtiensPermission denied to access property 'href'
this.contentWindow.location
est disponible pour d'autres domaines. Eventhis.contentWindow.location.href
est disponible pour d'autres domaines, mais uniquement pour l'écriture. Cependant, la lecturethis.contentWindow.location.href
est limitée au même domaine.Réponse basée sur JQuery <3
Comme mentionné par subharb, à partir de JQuery 3.0, cela doit être changé en:
https://jquery.com/upgrade-guide/3.0/#breaking-change-load-unload-and-error-removed
la source
if (counter > 1) { // do something on iframe actual change }
(en supposant que le compteur était défini sur 0 au début)Si vous n'avez aucun contrôle sur la page et que vous souhaitez surveiller une sorte de changement, la méthode moderne consiste à utiliser
MutationObserver
Un exemple de son utilisation, en regardant l'
src
attribut à changer d'uniframe
Sortie après 3 secondes
Sur jsFiddle
La réponse publiée ici en tant que question d'origine a été fermée comme un double de celle-ci.
la source
observe
. C'est juste un exemple.Remarque: l'extrait de code ne fonctionnera que si l'iframe a la même origine.
D'autres réponses ont proposé l'
load
événement, mais il se déclenche après le chargement de la nouvelle page dans l'iframe. Vous devrez peut-être être averti immédiatement après la modification de l'URL , et non après le chargement de la nouvelle page.Voici une solution JavaScript simple:
Cela permettra de suivre avec succès les
src
modifications d'attribut, ainsi que toutes les modifications d'URL effectuées à partir de l'iframe lui-même.Testé dans tous les navigateurs modernes.
J'ai également fait une idée de ce code. Vous pouvez également vérifier mon autre réponse . Cela explique un peu comment cela fonctionne.
la source
L'iframe conserve toujours la page parent, vous devez l'utiliser pour détecter dans quelle page vous vous trouvez dans l'iframe:
Code HTML:
Js:
la source
Depuis la version 3.0 de Jquery, vous pouvez obtenir une erreur
Ce qui peut être facilement corrigé en faisant
la source
Voici la méthode qui est utilisée dans les modules Commerce SagePay et Commerce Paypoint Drupal qui se compare essentiellement
document.location.href
à l'ancienne valeur en chargeant d'abord sa propre iframe, puis une externe.Donc, fondamentalement, l'idée est de charger la page vierge comme un espace réservé avec son propre code JS et un formulaire caché. Ensuite, le code JS parent soumettra ce formulaire caché où il
#action
pointe vers l'iframe externe. Une fois la redirection / soumission effectuée, le code JS qui est toujours en cours d'exécution sur cette page peut suivre vosdocument.location.href
changements de valeur.Voici un exemple de JS utilisé dans iframe:
Et voici JS utilisé dans la page parent:
Ensuite, dans la page de destination vierge temporaire, vous devez inclure le formulaire qui redirigera vers la page externe.
la source