Entiendo que no es posible saber qué está haciendo el usuario dentro de un iframe
dominio cruzado. Lo que me gustaría hacer es rastrear si el usuario hizo clic en el iframe
. Me imagino un escenario en el que hay un invisible div
encima iframe
y div
luego pasará el evento de clic al iframe
.
¿Es posible algo así? Si es así, ¿cómo lo haría? El iframes
son anuncios, así que no tengo control sobre las etiquetas que se utilizan.
javascript
iframe
ads
dom-events
click-tracking
Russ Bradberry
fuente
fuente
Respuestas:
No. Todo lo que puede hacer es detectar que el mouse entra en el iframe, y potencialmente (aunque no de manera confiable) cuando vuelve a salir (es decir, tratando de resolver la diferencia entre el puntero que pasa sobre el anuncio en su camino a otro lugar en lugar de demorarse) en el anuncio).
No, no hay forma de falsificar un evento de clic.
Al capturar el mousedown, evitará que el clic original llegue al iframe. Si pudiera determinar cuándo estaba a punto de presionar el botón del mouse, podría intentar quitar el div invisible del camino para que el clic pasara ... pero tampoco hay ningún evento que se dispare justo antes de un mousedown.
Podría intentar adivinar, por ejemplo, mirando para ver si el puntero se ha detenido, adivinando que podría estar a punto de hacer clic. Pero es totalmente poco confiable, y si fallas, te has perdido un clic.
fuente
Esto es ciertamente posible. Esto funciona en Chrome, Firefox e IE 11 (y probablemente en otros).
JSFiddle
Advertencia: Esto solo detecta el primer clic. Según tengo entendido, eso es todo lo que quieres.
fuente
blur
evento del iframe no se dispara).Basado en la respuesta de Mohammed Radwan, se me ocurrió la siguiente solución jQuery. Básicamente, lo que hace es realizar un seguimiento de lo que la gente de iFrame está planeando. Luego, si la ventana se vuelve borrosa, lo más probable es que el usuario haya hecho clic en el banner del iframe.
el iframe debe colocarse en un div con un id, para asegurarse de saber en qué iframe hizo clic el usuario:
entonces:
... esto mantiene overiFrame en -1 cuando no se cierran los iFrames, o se establece el 'bannerid' en el div de envoltura cuando se flota un iframe. Todo lo que tiene que hacer es verificar si 'overiFrame' está configurado cuando la ventana se vuelve borrosa, así: ...
Solución muy elegante con un pequeño inconveniente: si un usuario presiona ALT-F4 al pasar el mouse sobre un iFrame, lo registrará como un clic. Sin embargo, esto solo sucedió en Firefox, IE, Chrome y Safari no lo registraron.
Gracias de nuevo Mohammed, solución muy útil!
fuente
setTimeout(function(){ window.focus(); }, 0);
. Ahora, el usuario hace clic, pone el foco en el iframe, el script retira ese foco y ahora puede monitorear más cambios de foco de futuros clics.Esta es una pequeña solución que funciona en todos los navegadores, incluso IE8:
Puede probarlo aquí: http://jsfiddle.net/oqjgzsm0/
fuente
El siguiente código le mostrará si el usuario hace clic / pasa el mouse o sale del iframe: -
Debe reemplazar el src en el iframe con su propio enlace. Espero que esto ayude. Saludos, Mo.
fuente
Acabo de encontrar esta solución ... Lo probé, me encantó ...
Funciona para iframes de dominio cruzado para escritorio y dispositivos móviles.
No sé si todavía es infalible
Codificación feliz
fuente
Puede lograr esto utilizando el evento de desenfoque en el elemento de ventana.
Aquí hay un complemento jQuery para rastrear clics en iframes (activará una función de devolución de llamada personalizada cuando se haga clic en un iframe): https://github.com/finalclap/iframeTracker-jquery
Úselo así:
fuente
ver http://jsfiddle.net/Lcy797h2/ para ver mi solución de largo aliento que no funciona de manera confiable en IE
fuente
Esto funciona para mí en todos los navegadores (incluido Firefox)
https://gist.github.com/jaydson/1780598
https://jsfiddle.net/sidanmor/v6m9exsw/
<iframe id="idanmorblog" src="https://sidanmor.com/" style="width:400px;height:600px" ></iframe>
fuente
Mohammed Radwan, su solución es elegante. Para detectar clics de iframe en Firefox e IE, puede usar un método simple con document.activeElement y un temporizador, sin embargo ... He buscado en todas las interwebs un método para detectar clics en un iframe en Chrome y Safari. A punto de rendirme, encuentro tu respuesta. ¡Gracias Señor!
Algunos consejos: He encontrado que su solución es más confiable al llamar a la función init () directamente, en lugar de mediante attachOnloadEvent (). Por supuesto, para hacer eso, debe llamar a init () solo después del iframe html. Entonces se vería algo así como:
fuente
Puede hacer esto para burbujear eventos en el documento principal:
Simplemente extienda la lista de eventos para más eventos.
fuente
Me encontré con una situación en la que tenía que rastrear los clics en un botón de redes sociales que se activaba a través de un iframe. Se abriría una nueva ventana al hacer clic en el botón. Aquí estaba mi solución:
fuente
http://jsfiddle.net/QcAee/406/
¡Simplemente haga una capa invisible sobre el iframe que retroceda cuando haga clic y suba cuando se dispare el evento mouseleave!
Necesita jQuery
¡esta solución no propaga el primer clic dentro del iframe!
fuente
Esto definitivamente funciona si el iframe es del mismo dominio que su sitio principal. No lo he probado para sitios entre dominios.
Sin jQuery, podría intentar algo como esto, pero nuevamente no lo he intentado.
Incluso puedes filtrar tus resultados:
fuente
Combinando la respuesta anterior con la capacidad de hacer clic una y otra vez sin hacer clic fuera del iframe.
fuente
Podemos atrapar todos los clics. La idea es restablecer el foco en un elemento fuera del iFrame después de cada clic:
JSFiddle
fuente
Creo que puedes hacer algo como:
usando jQuery para lograr esto.
fuente
Como se encuentra allí: Detectar Haga clic en Iframe usando JavaScript
=> Podemos usar iframeTracker-jquery :
fuente
Basado en la respuesta de Paul Draper, creé una solución que funciona continuamente cuando tienes Iframes que abren otra pestaña en el navegador. Cuando regresa la página, continúe activo para detectar el clic sobre el marco, esta es una situación muy común:
El Código es simple, el evento de desenfoque detecta la pérdida de foco cuando se hace clic en el iframe y prueba si el elemento activo es el iframe (si tiene varios iframe puede saber quién fue seleccionado) esta situación es frecuente cuando tiene marcos publicitarios .
El segundo evento activa un método de enfoque cuando regresa a la página. Se utiliza el evento de cambio de visibilidad.
fuente
Aquí hay una solución que utiliza enfoques sugeridos con hover + blur y trucos de elementos activos, no ninguna biblioteca, solo js puro. Funciona bien para FF / Chrome. En su mayoría, el enfoque es el mismo que propuso @Mohammed Radwan, excepto que uso un método diferente propuesto por @ zone117x para rastrear el clic del iframe para FF, porque window.focus no funciona sin configuraciones de usuario adicionales :
Aquí está el método compuesto:
fuente
supuestos -
Esto funciona tanto para iframes fuente como sin fuente
Si se abre una nueva pestaña / se descarga la misma página y el puntero del mouse está dentro del Iframe, se considera un clic
fuente