Suponiendo que no tengo control sobre el contenido en el iframe, ¿hay alguna forma de detectar un cambio de src en él a través de la página principal? ¿Algún tipo de carga tal vez?
Mi último recurso es hacer una prueba de intervalo de 1 segundo si el iframe src es el mismo que era antes, pero hacer esta solución hacky sería una mierda.
Estoy usando la biblioteca jQuery si me ayuda.
javascript
jquery
iframe
onload
Matrym
fuente
fuente
src
propiedad cuando se haga clic en un enlace en el iframe? No estoy seguro de eso, si tuviera que adivinar, si diría "no". No son formas a las propiedades del monitor (en Firefox por lo menos que yo sepa), pero no estoy seguro de si va a ser de alguna utilidad en este caso.src
atributo en el DOM no cambia en las últimas versiones de FireFox o Safari. La respuesta de @ Michiel a continuación es tan buena como he podido llegar hasta ahora.Respuestas:
Es posible que desee utilizar el
onLoad
evento, como en el siguiente ejemplo:La alerta aparecerá cuando cambie la ubicación dentro del iframe. Funciona en todos los navegadores modernos, pero puede que no funcione en algunos navegadores muy antiguos como IE5 y principios de Opera. ( Fuente )
Si el iframe muestra una página dentro del mismo dominio del padre , podrá acceder a la ubicación con
contentWindow.location
, como en el siguiente ejemplo:fuente
this.contentWindow.location.href
me salePermission denied to access property 'href'
this.contentWindow.location
está disponible para otros dominios. Eventhis.contentWindow.location.href
está disponible para otros dominios, pero solo para escritura. Sin embargo, la lecturathis.contentWindow.location.href
está limitada al mismo dominio.Respuesta basada en JQuery <3
Como se menciona en subharb, a partir de JQuery 3.0, esto debe cambiarse a:
https://jquery.com/upgrade-guide/3.0/#breaking-change-load-unload-and-error-removed
fuente
if (counter > 1) { // do something on iframe actual change }
(suponiendo que el contador se haya establecido en 0 al inicio)Si no tiene control sobre la página y desea ver algún tipo de cambio, entonces el método moderno es usar
MutationObserver
Un ejemplo de su uso, observando el
src
cambio del atributo de uniframe
Salida después de 3 segundos
En jsFiddle
La respuesta publicada aquí como pregunta original se cerró como un duplicado de esta.
fuente
observe
. Esto es solo un ejemplo.Nota: El fragmento solo funcionaría si el iframe tiene el mismo origen.
Otras respuestas propusieron el
load
evento, pero se dispara después de que se carga la nueva página en el iframe. Es posible que deba recibir una notificación inmediatamente después de que cambie la URL , no después de cargar la nueva página.Aquí hay una solución simple de JavaScript:
Esto rastreará con éxito los
src
cambios de atributos, así como cualquier cambio de URL realizado desde el propio iframe.Probado en todos los navegadores modernos.
También hice una idea general con este código. Puedes consultar mi otra respuesta también. Se profundiza un poco en cómo funciona esto.
fuente
El iframe siempre mantiene la página principal, debe usar esto para detectar en qué página se encuentra en el iframe:
Código HTML:
Js:
fuente
Desde la versión 3.0 de Jquery, puede obtener un error
Que se puede solucionar fácilmente haciendo
fuente
Aquí está el método que se usa en Commerce SagePay y en los módulos de Commerce Paypoint Drupal que básicamente se compara
document.location.href
con el valor anterior cargando primero su propio iframe, luego externo.Básicamente, la idea es cargar la página en blanco como marcador de posición con su propio código JS y forma oculta. Luego, el código JS principal enviará ese formulario oculto donde
#action
apunta al iframe externo. Una vez que se produce la redirección / envío, el código JS que aún se ejecuta en esa página puede rastrear susdocument.location.href
cambios de valor.Aquí hay un ejemplo de JS utilizado en iframe:
Y aquí se usa JS en la página principal:
Luego, en la página de destino temporal en blanco, debe incluir el formulario que redirigirá a la página externa.
fuente