【问题标题】:How to track the user in an iframe如何在 iframe 中跟踪用户
【发布时间】:2010-12-26 14:17:59
【问题描述】:

我想跟踪用户单击 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>

【问题讨论】:

    标签: javascript iframe onclick hyperlink onload


    【解决方案1】:

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

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

    【讨论】:

    • 是否可以从位于 domain.com/folder/file.htm 的页面访问:sub1.domain.com ?这对我来说可能是一个答案。对于本地版本,以下代码有效:stackoverflow.com/questions/753863/…
    【解决方案2】:

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

    那是你的拦路虎。如果您可以在远程页面中扩充代码,则可以使用 postMessage 和 iframe 片段标识符 hack 来获得浏览器覆盖率。 幸运的是,有人已经为你做了这些脏活:

    【讨论】:

    • 不幸的是,增加代码不是一种选择。想想位于不同国家的不同部门。我在这个方向上看到了一些黑客攻击,实际上只发送一个字符串(当前正在点击或显示在 iframe 中的 URL)就足够了。真的太糟糕了,我不能用这个。
    【解决方案3】:

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

    我可能会按照这个 Stackoverflow 问题的思路移动:

    "Apply “onclick” to all elements in an iFrame"

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

    【讨论】:

      【解决方案4】:

      使用 jQuery 会很容易。

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

      【讨论】:

      • 我还没有使用过 jQuery,但是上面的代码不仅适用于 iframe 的第一页吗?所有后续页面也必须更改,我的网站才能执行应有的操作。
      • 它不起作用,因为它位于不同的子域中。如果您在同一个域中获取 iframe,则可以使用 $(parent).find('a').click(function(){}),但由于子域,这将不起作用。
      • 触及子域问题。我确实编写了该代码以从 TOP 页面工作。因此,每次将新页面加载到 iframe 中时,它都会将点击处理程序附加到该页面上的所有锚点。这样您就不必更改 iframe 中加载的每个页面,只需更改父(包含)页面。
      猜你喜欢
      • 2019-05-14
      • 2022-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-10
      • 1970-01-01
      相关资源
      最近更新 更多