3

当用户单击 IFrame 中的链接时,我想跟踪 iframe 内部发生的情况。包含 iframe(父级)的页面用于跟踪用户在 iframe 中的页面导航。尽管子域会有所不同,但这两个页面都将托管在同一个顶级域上。

我需要每次点击都通知父页面,但我无法直接控制加载到 iframe 中的页面。

每当加载 iframe 中的页面时,是否可以向所有链接添加 onclick?我该怎么做呢?

这将是构建的“模板”:

<html>
 <script language="javascript">
     var currentURL;
 </script>
 <body>
     <iframe id="container" width="500" height="500" src="http://subdomain.parentdomain.com"/>
 </body>

4

4 回答 4

3

iframe 跨域访问需要是相同的域、子域和端口。

如果您将它们放在同一个域中,您可以在所有链接上绑定点击事件处理程序,然后当它们被点击时,将点击记录到谷歌分析、您的数据库等。

于 2009-12-14T21:37:10.000 回答
1

我无法直接控制加载到 iframe 中的页面

那是你的拦路虎。如果您可以在远程页面中增加代码,您可以使用 postMessage 和 iframe 片段标识符 hack 来获得浏览器覆盖率。幸运的是,已经有人为您完成了肮脏的工作:

于 2009-12-14T23:48:41.037 回答
0

我将使用 AJAX 代理让内容(就浏览器而言)来自我的域。这将解决 CodeJoust 提到的所有跨域脚本问题。由于我将产生开销,交付速度可能是一个问题,但必须看到这一点。

我可能会沿着这个 Stackoverflow 问题的思路移动:

“将“onclick”应用于 iFrame 中的所有元素”

关于与代理和动态更改页面内容有关的法律问题,必须进行检查。我相信,从道德的角度来看,跟踪明确同意的用户是没有问题的。

于 2009-12-15T11:04:24.490 回答
-2

使用 jQuery 会很容易。

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

function myClickHandler(){
    /* Do something */
}
于 2009-12-14T21:39:58.110 回答