如何使iframe中的所有链接在新标签页中打开

17

我想让在<iframe>中点击链接时,链接会在新标签页中打开 - 而不是在<iframe>中打开。请注意,我无法控制人们通过<iframe>查看的内容。

我尝试使用JavaScript实现,例如$('a').setAttribute('target','_blank');,但对我来说不起作用。 我在我的HTML文档中还有<base target="_blank">,但那也没有起作用。

这是不可能的吗?还是我只是在错误的位置搜索? 先感谢您!


1
iframe页面是否来自同一域? - Milind Anantwar
2
尝试使用parent.window.open("{{你的位置}}"); - Liad Livnat
1
类似的问题?http://stackoverflow.com/questions/17128889/links-within-an-iframe-window-to-open-in-new-tab?rq=1 - pazcal
可能会有类似的问题,但它们都有规格。而且 iframe 在我的网页上,iframe 显示的内容不是我的。 - Darryl Huffman
6个回答

32

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

<base target="_parent" />

否则在新窗口中打开:

<base target="_blank" />

11

我期待的是:

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

如果 iFrame 中的内容来自不同的域名,那么就有访问问题,无法从包含页面操纵 iFrame 内部的页面,通常情况下 jQuery 会“悄无声息”地失败。

也就是说:如果您的页面来自域 a(例如 mysite.com),而 iframe 来自域 b(例如 someothersite.com),那么浏览器的安全行为会阻止使用 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

2

使用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");
   }
});

1

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


哈哈,这是我尝试过的所有其他解决方案中唯一有效的方法。非常感谢! - odedta

0

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

FIDDLE


1
你只是告诉他使用不同的JavaScript表示法。这怎么解决问题呢?这更适合作为评论而不是答案。 - AlbatrossCafe
我点赞了,因为它确实修复了所提议的JS问题。原始发帖人有两个问题。 - Citizen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接