【问题标题】:Make links inside an iframe open in a new window在新窗口中打开 iframe 中的链接
【发布时间】:2011-06-02 19:09:07
【问题描述】:

我正在尝试在 iframe 内显示一张地图,该地图有一个指针,在鼠标悬停时会显示有关某家公司的一些信息,事情是一旦你点击链接,页面就会在 iframe 内打开,这会破坏体验,所以我想知道是否可以在新窗口中打开 iframe 中的链接,而不是使用 jquery 或类似的东西?

我有自动取款机的代码是

http://www.jsfiddle.net/rkd59/1/

编辑:至少在 iframe 中捕获一次点击,因此我可能会调整 iframe 的大小

【问题讨论】:

    标签: javascript jquery html css iframe


    【解决方案1】:

    您需要某种开放的 API 才能正确执行此操作,而 Eniro 没有根据 this page(瑞典语)提供。

    我建议您改用Google Maps API v3。我制作了一个与 Eniro 相似的 example on jsFiddle

    我很乐意在这方面为您提供更多帮助,所以尽管问吧!

    【讨论】:

    • 嗯,这比我想象的要好很多
    • @Breezer:我很高兴听到!我保证您会在学习 Google Maps API 时获得极大的乐趣 - 它非常强大! :)
    • @SteveFenton 链接已损坏。重定向到主页。请更新。
    • 您的链接已损坏...
    【解决方案2】:

    您不能(或者非常非常难以)使 iframe 内的事件影响父页面。这是为了防止来自 XSS 或cross site scripting 的攻击。话虽如此,如果 iframe 中的站点位于您自己的 上,并且您想设置一些非常棘手的 ajaxing 和 php 会话 ID,也许您可以做一些工作,但即使那样我也不确定。而且我不知道这是否是一个安全漏洞,也许其他人可以对此进行讨论。它可能看起来像:

    1. 主页设置会话 ID 并通过 get 变量将其传递给 iframe url
    2. iframe 获取点击信息,并通过对服务器上脚本的 ajaxing 调用将其发送到 Session 变量。
    3. 然后主页会读取(如何?)会话 cookie 并根据它的值进行更改。

    总而言之,您可能会发现使用不同的方法实现您想要的结果可能更简单、更安全。

    【讨论】:

    • 在同一个域中它实际上相当简单..您只需将脚本/函数放在父文档中,然后从子框架中使用 parent.functionname() 调用它...但是作为这将位于您可以访问两个文档代码的同一个域上..
    • 必须至少有可能以某种方式捕获 iframe 维度内的点击,而不是链接上的点击,只需点击 Δx,Δy
    • @Breezer 你的 cmets 会记住一种 over iframe 的叠加层,这会使它看起来就像你在点击 iframe 项目,但实际上您正在单击叠加层。但是当然,没有任何点击会在框架网页中注册。
    • 是的,这就是问题=/
    【解决方案3】:

    由于此地图是在 iFrame 中加载的,因此无法在链接上运行任何 javascript 事件侦听器,也无法更改 html。

    【讨论】:

      【解决方案4】:

      要在新窗口中弹出链接,您通常会使用target="_blank"

      <a href="http://www.yahoo.com" target="_blank">Go to Yahoo</a>
      

      但是,这只有在您可以修改 iFrame 中显示的代码时才有效

      【讨论】:

      • 附带说明,target 属性目前在 HTML 4.01 和 XHTML v1.x 中已被弃用,但它将在 HTML5 中恢复。
      【解决方案5】:

      请尝试以下方法:

      <script>
      x=document.querySelectorAll("a");
      for(i=0;i<x.length;i++)
      {
         x[i].setAttribute("target","_blank");
      }
      </script>
      

      因此所有链接都在新框架中打开。

      【讨论】:

        【解决方案6】:

        有一个部分解决方案

        您可以在 IFRAME 顶部添加一个绝对定位的 DIV 标记,并改为捕获对此的点击。请参阅此处以 20% alpha 红色着色的示例。

        http://www.jsfiddle.net/rkd59/6/

        但是,这意味着地图在“只读模式”下工作,虽然您可以捕获点击事件,但您不会知道用户点击了哪个链接。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-21
          • 2017-07-19
          相关资源
          最近更新 更多