【问题标题】:Detecting clicks inside an iframe from outside?从外部检测 iframe 内的点击?
【发布时间】:2023-03-27 14:44:02
【问题描述】:

这里是场景。有从其他站点加载到 iframe 中的内容。我点击 iframe 中的某个链接。

是否有可能在 iframe 之外以某种方式捕获该链接是什么?

更新 由于我收到了我的意图是否纯正的问题,因此我将更多地解释用例。可能是我在执行此任务时的方向错误。

所以,我们有一个桌面客户端,可以在网络上四处走动(实际上是为了购物),当客户找到她想要购买的东西时,她会点击“那个”(任何东西 - 图片、链接、地址)并将“那个”发送到我们的服务是手动解决链接到产品并转换为在她的注册表中的条目。没有什么不寻常的。

现在,任务是使其成为网络应用程序。因此,客户在我们的网站上注册并开始浏览网上商店。因此,我的第一选择是 iframe。但问题是如何找到她点击的内容?

或者,一般来说 - 如何将“书签”保存到其他站点的某个对象?

【问题讨论】:

    标签: javascript dom iframe


    【解决方案1】:

    一些网站采用的一种方法是创建书签。用户会定期浏览,然后如果他们通过您的 Web 应用程序找到想要添加为书签的网站,他们只需单击书签即可。

    书签是一个 javascript 函数,它可能会显示一个模式对话框窗口,然后可以远程访问您网站的书签功能。

    例如,Facebook's Share Bookmarklet,任意数量的Delicious 书签。

    然后,您的 Web 应用程序将提供一种方法来组织人们使用您的小书签保存的书签。您也可以查看 Firefox 插件,但书签是一种更适合跨浏览器的解决方案。

    【讨论】:

      【解决方案2】:

      您可以尝试不可见的 div 点击技术,在 iframe 顶部有一个 div 并在隐藏时注册一个点击服务器端,一旦他们将鼠标悬停在它上面。

      https://gist.github.com/729591

      【讨论】:

        【解决方案3】:

        实际上没有办法做到这一点。如果没有被访问站点的合作,上述回答者指出的window.name 传输将无法工作。除非父子节点在同一个域中,否则无法访问window.name。

        我最近通过在子级中设置 window.name 然后重定向到父域的 404 页面来解决这个问题。突然,父框架可以读取iframeID.contentWindow.name 值并获取信息。但该重定向是由我在 iframe 中的页面完成的。

        我所见过的这种跨域、跨框架通信的每个场景都是在程序员控制子框架或同时控制父框架和子框架时发生的。我发现的每个浏览器都只控制父级。

        【讨论】:

          【解决方案4】:

          如果您的 iframe 在同一个域中,只需将事件侦听器添加到链接的 onclick 事件即可。

          例子:

          <a href="javascript:void(0)" onclick="top.harvestLink(this)" title="Item=foo" alt="">Foo</a>
          

          然后在托管 iframe 的页面中,您有您的处理程序:

          function harvestLink(anAnchor,aShoppingListArray) {
            var itemName = anAnchor.title.split("=")[1];
            aShoppingList.push({item:itemName,dateStamp:new Date()});
          }
          

          这是一个说明原理的简单示例。您可能希望将其他信息添加到标题标签,在这种情况下您将进行不同的解析,并且您可能希望使用与“标题”不同的属性来存储它。您可以自己做家务。也可以使用按钮元素而不是锚标签来完成(更容易,IMO),但请务必将按钮的类型属性设置为“按钮”,否则 IE 将提交表单。

          【讨论】:

            【解决方案5】:

            如果它来自另一个站点,那么我知道的唯一方法是将您需要的信息写入 iframe 的 window.name 属性。

            那个,你可以从你的主要文档中阅读。

            【讨论】:

              【解决方案6】:

              如果页面不在同一个域中,则无法执行此操作。您的脚本无法跨域查看。

              【讨论】:

              • 我不想这么说,但这也是我的经验——我不得不从另一个角度解决这个问题,使用相当复杂的服务器端代理在我自己的服务器上复制该页面,这不好玩。
              • 这方面的常用术语是“同源策略”。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2012-11-06
              • 2021-04-13
              • 2011-05-23
              • 1970-01-01
              • 2012-04-30
              • 1970-01-01
              • 2016-07-10
              相关资源
              最近更新 更多