2010-03-18 30 views
5

Quiero detectar haga clic en INSIDE iframe no onclick en iframe sí mismo intenté onclick evento debe hacer clic en iframe para activar la función incluso probé addeventlistener a ventana o documento nada funciona como si el iframe no estuviera allí función nunca Triger cuando hago clic en el interior iframe :(PLZ ayudardetectar haga clic dentro de iframe

+1

¿Usted intentó poner al oyente en la etiqueta BODY del contenido dentro de la iframe? – Zoidberg

+0

Es un sitio externo en un iframe; No puedo agregarle nada ... – santa

+0

Es posible, vea la solución de navegador cruzado: http://stackoverflow.com/a/32138108/1064513 –

Respuesta

2

Por razones de seguridad, no está supone que es capaz de realizar un seguimiento de las actividades en un IFRAME que va a un sitio web diferente. Si usted tiene un IFRAME en su propio sitio que vaya a otra página en su propio sitio, luego resuelva esto agregando el seguimiento de clics directamente en el código que ejecuta el IFRAME.

Si esto es imposible, puede considerar ejecutar su propio servidor proxy personalizado para el servidor web IFRAME: ed, y de esa manera podrá agregar su propio seguimiento de clics. Ver Mousehole by _why para ejemplos de código.

0

Puede poner un DIV transparente encima del IFRAME.
Se talla ese DIV al mismo tamaño o más grande que el IFRAME.
Y con una propiedad CSS z-index más alta.

Luego, cuando hace clic en el IFRAME, el DIV recibe el evento.

Pero como el mundo no es perfecto, ahora ha perdido la capacidad de hacer clic dentro del IFRAME.

+0

Si alguien hace esto y captura el clic en el div, ¿habría alguna manera? para propocionarlo (realmente sería simular un clic en la misma ubicación en el iframe subyacente ...)? – Benj

+0

El div no recibe el evento click en este caso. No es posible hacer clic en la detección sobre o en el iframe si el contenido es de un dominio diferente. – Andy

9

sólo funciona en marcos flotantes en el mismo dominio:

$('body', $('select-your-iframe-here').contents()).click(function(event) { 
    console.log('Clicked! ' + event.pageX + ' - ' + event.pageY); 
}); 
+0

Solución de cross-cross y crossbrowser: http://stackoverflow.com/a/32138108/1064513 –

3

haga esta prueba

$(window).click(function(e){ 
    $('#result').text('Clicked inside document'); 
}); 

$(window).blur(function(e){ 
    $('#result').text('Clicked out of the window or on the iframe'); 
});​ 

http://jsfiddle.net/4vBRe/

Para detectar sólo el clic sobre el marco flotante a continuación, utilizar evento mouseover continuación, difuminar

+2

Esto funciona ...supongo que no en todas las situaciones, pero es un truco útil – byronyasgur

6

Los navegadores web no te permitirán acceder al contenido de un iframe por razones de seguridad (excepto si el iframe está en el mismo dominio que la página principal).

Pero hay una solución, utilizando el evento de desenfoque que se dispara cuando se hace clic en un iframe (porque mientras el iframe obtiene el foco, la página principal lo pierde).

He escrito un plugin jQuery que usa este consejo para detectar clics en iframe, está disponible aquí: https://github.com/finalclap/iframeTracker-jquery. Puede leer el tutorial en http://www.finalclap.com/tuto/track-iframe-click-jquery-87/ (está en francés).

Para usarlo, sólo tiene que coincidir con el elemento (s) iframe desea realizar un seguimiento, el suministro de una función de devolución de llamada:

jQuery(document).ready(function($){ 
    $('.iframe_wrap iframe').iframeTracker({ 
     blurCallback: function(){ 
      // Do something when iframe is clicked (like firing an XHR request) 
     } 
    }); 
}); 
+0

¿Hay alguna manera de detectar todos los clics dentro del marco y no solo el primero? – Gab

+0

No lo creo, debido a la misma política de origen: https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy – Vince

Cuestiones relacionadas