Quiero hacer un seguimiento de lo que sucede dentro de un iframe cuando un usuario hace clic en enlaces en el IFrame. La página que contiene el iframe (el padre) es para rastrear la navegación del usuario a través de la página en el iframe. Ambas páginas estarán alojadas en el mismo dominio de nivel superior, aunque los subdominios serán diferentes.

Necesito que se notifique a la página principal de cada clic, pero no tengo control directo sobre las páginas que cargo en el iframe.

¿Es posible agregar un onclick a todos los enlaces cada vez que se carga la página en el iframe? ¿Cómo haría para hacer esto?

Esta sería la "plantilla" sobre la cual construir:

<html>
 <script language="javascript">
     var currentURL;
 </script>
 <body>
     <iframe id="container" width="500" height="500" src="http://subdomain.parentdomain.com"/>
 </body>
3
Paul 15 dic. 2009 a las 00:35

4 respuestas

La mejor respuesta

Voy a usar un Proxy AJAX para que el contenido (en lo que respecta al navegador) provenga de mi dominio. Esto resolverá todos los problemas de secuencias de comandos de dominio cruzado que CodeJoust mencionó. La velocidad de entrega puede ser un problema debido a la sobrecarga que generaré, pero eso tendrá que verse.

Probablemente me moveré en la línea de esta pregunta de Stackoverflow:

"Aplicar" onclick "a todos los elementos en un iFrame"

En cuanto a los problemas legales relacionados con la representación y el cambio dinámico del contenido de las páginas, deberá verificarse. Creo que el seguimiento de los usuarios que dan su consentimiento expreso es, desde un punto de vista ético, poco problemático.

0
Community 23 may. 2017 a las 11:57

Con jQuery sería fácil.

$(document).ready(function(){
   var iframeWindow = $('#container')[0].contentWindow;
   $(iframeWindow).load(function(){
       $(this).find('a').click(top.myClickHandler);
   });
}

function myClickHandler(){
    /* Do something */
}
-2
Justin Swartsel 14 dic. 2009 a las 21:39

No tengo control directo sobre las páginas que cargo en el iframe

Ese es tu bloqueador. Si puede aumentar el código dentro de las páginas remotas, puede usar postMessage y el pirateo del identificador de fragmento de iframe para obtener cobertura del navegador. Afortunadamente, alguien ya hizo el trabajo sucio por ti:

1
Geoff Moller 14 dic. 2009 a las 23:48

El acceso a Iframe CrossDomain debe ser el mismo dominio, subdominio y puerto.

Si los tuviera en el mismo dominio, podría vincular los controladores de eventos de clic en todos los enlaces, luego, cuando se haga clic, registre un clic en algo como Google Analytics, su base de datos, etc.

3
CodeJoust 14 dic. 2009 a las 21:37