【问题标题】:How to make all links in an iframe open in new tab [duplicate]如何在新标签页中打开 iframe 中的所有链接 [重复]
【发布时间】:2014-05-13 12:52:19
【问题描述】:

我正在努力做到这一点,因此当您单击 <iframe> 中的链接时,它将在新选项卡中打开该链接 - 而不是在 <iframe> 中。请注意,我无法控制人们通过<iframe> 查看的内容。

我可能正在尝试使用 javascript 来执行此操作,例如 $('a').setAttribute('target','_blank'); 但这不适合我。 我在我的 HTML 文档中也有 <base target="_blank">,这也不起作用。

这不可能吗?还是我只是在错误的地方搜索? 提前致谢!

【问题讨论】:

  • iframe 页面是否来自同一个域??
  • 试试 parent.window.open("{{your location}}");
  • 可能有类似的问题,但他们有规格。 iframe 在我的网页上,iframe 显示的内容不在。

标签: javascript jquery html iframe


【解决方案1】:

要在父窗口中加载页面上的所有链接,请使用:

<base target="_parent" />

在新窗口中使用:

<base target="_blank" />

【讨论】:

    【解决方案2】:

    我希望这样:

    $('a').setAttribute('target','_blank');
    

    .. 失败(静默 - 因为 jquery 通常静默失败),因为如果 iFrame 的内容来自不同的域,则从包含页面操作 iFrame 内的页面会出现访问问题。

    也就是说:如果您自己的页面来自域 a(例如 mysite.com),而 iframe 来自域 b(例如 someothersite.com),那么 Web 浏览器的安全行为就是使用 javascript 来操作 iFrame 内容将给出“访问被拒绝”错误。

    如果您使用非 jquery javascript,您会看到错误。在父页面中,类似这样的内容:

    window.frames["iFrameName"].getElementsByTagName("a")[0].target="_blank"
    

    你会看到错误。

    很遗憾,我不确定您能做些什么。停止一个网站包含另一个网站,并在加载后更改内容以显示其他内容是故意的。

    一种解决方法是在您的服务器(即同一个域)上调用一个脚本并传入一个 URL。该脚本获取您所追求的页面内容并将其反刍到您的浏览器,因此您将拥有所需网页的内容,但它的地址在您的网站内..例如,如果它是 php:

    http://yourdomain.com/getURL.php?url=http:www.google.com

    注意那里的身份验证问题

    【讨论】:

      【解决方案3】:

      使用javascript

      var links= document.getElementsByTagName('a');
      for (var i=0; i<links.length; i++){
         links[i].setAttribute('target', '_top');
      }
      

      使用 jquery

      $('a').each(function() {
         var a = new RegExp('/' + window.location.host + '/');
         if (!a.test(this.href)) {
             $(this).attr("target","_top");
         }
      });
      

      【讨论】:

        【解决方案4】:

        检查这个解决方案它对我有帮助:Make links inside an iframe open in a new window

        或者你可以试试 parent.window.open("{{your location}}");

        【讨论】:

          【解决方案5】:

          target='blank' 替换为onclick='window.open();'

          【讨论】:

          • 大声笑,这是我尝试过的所有其他解决方案中唯一真正有效的方法。非常感谢!
          【解决方案6】:

          使用$('a').attr('target','_blank'); 代替 setAttribute...

          FIDDLE

          【讨论】:

          • 你只是告诉他使用不同的 JavaScript 表示法。这如何解决这个问题?这将更好地作为评论而不是答案。
          • 我投了赞成票,因为它确实修复了提议的 JS。 OP 有两个问题。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-09-30
          • 2018-11-04
          • 1970-01-01
          • 2020-07-27
          • 1970-01-01
          • 2014-04-18
          相关资源
          最近更新 更多