【问题标题】:iFrame click monitoring from parent来自父级的 iFrame 点击监控
【发布时间】:2011-04-07 15:01:48
【问题描述】:

我们有一位客户需要我们通过 iFrame 在他们的网站中添加一个工具。在 iFrame 中,我们正在显示产品,当单击“添加到购物车”链接时,需要将产品添加到父文档购物车中。父项和子项不在同一个域中。不幸的是,客户端无法为我们提供发布到购物车的方法,我们所能做的就是调用他们的 cart.add(qty,id) 函数,但它在 iFrame 中不起作用,因为 iFrame 显然没有可用的函数.此外,我们不能只是将帖子伪造到购物车,因为我们无法访问会话 ID。幸运的是,我可以在他们的主页上添加我需要的任何 Javascript。

有没有办法让我监听来自父母的 iFrame 中的点击,然后从 iframe 中提取数量和产品 id 值,然后执行 cart.add 函数?考虑到限制,有没有更好的方法来解决这个问题?

【问题讨论】:

    标签: javascript jquery iframe dom-events cross-domain


    【解决方案1】:

    这是不可能的,因为它存在安全风险,并且可以通过same-origin policy 防止。

    【讨论】:

      【解决方案2】:

      不要使用 iFrame。使用 jquery .load() 将整个其他站点放在一个 div 中。确保您的“点击”是 live() 以便他们捕捉到添加内容的点击,这应该没问题。我不知道您加载的网站有多大。如果你不需要所有的标题信息,你也可以指定只引入页面的一部分,或者指定一个特定的 div。

      【讨论】:

      • jQuery.load() 不起作用,因为它也受到同源策略的限制(如附加说明下关于 jQuery 的 API 文档中所述 - api.jquery.com/load
      • 只要包含跨域Ajax插件就可以实际使用jQuery.load。然而,问题在于另一个“站点”实际上是一个完整的 Rails 应用程序。当我之前尝试过这种方法时,它变得非常痛苦,因为您需要将所有 js 逻辑移到应用程序之外并进入主框架......非常头疼。
      • 对不起。没有考虑跨域的事情。这几乎不是一个优雅的解决方案,但我不知道对于这种不雅的请求是否有一个优雅的解决方案。 ://
      • 告诉我,哈哈...我想如果我们让他们在工具 url 中添加 CNAME 记录,那么我们可以避免跨域问题并仍然通过 iframe 托管。
      【解决方案3】:

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 2014-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多