HTML: 如何强制链接在新标签页中打开,而不是新窗口

82

我使用target="_blank"来在新标签页中打开链接,但在IE浏览器中会打开一个新窗口,这是完全合理的,因为这就是_blank的预期行为。

我不知道其他浏览器中target="_blank"的行为如何。

是否有一种方法可以强制链接在新标签页中打开。如果浏览器支持标签页...否则打开一个新窗口。


7
target="_blank" 会在 Firefox、Chrome 和 Opera 浏览器中新标签页中打开链接。而在 IE 和 Safari 浏览器中,会在新窗口中打开链接。 - Šime Vidas
1
哇,你甚至都不能使用命名目标使IE在你的命名选项卡中打开新链接。也就是说,如果你选择用 target="myName" 在新选项卡中打开一个链接,后续具有相同目标的链接将不会在你的选项卡中打开,而是会打开一个新窗口。听起来像是一个可用性bug。谢谢IE。 - Matthew
14个回答

81

作为浏览器呈现的HTML的作者,目前我所知道的没有任何方法可以实现那样的功能。这基本上取决于浏览器及其设置/用户自己设置的偏好。

另外,你不应该强制用户进行此操作,浏览器是用户的财产。如果用户想要在标签页或新窗口中打开所有链接,那么就让用户按照自己的意愿来做。

这样做的好处在于,我们不能做某些事情。 target=_blank仍然被滥用,弹出窗口已经被使用过度了。


19
默认情况下,大多数浏览器会在新选项卡中打开 target="_blank" 的链接,但在早期,它会在新窗口中打开。目前似乎没有强制链接在新选项卡中打开的方法。 - tomsseisums
7
应该提供一种设置选项,来定义哪些链接应该在新标签页或窗口中打开。这对于外部链接很方便。我认为大多数用户都同意在新标签页中打开链接是最理想的方法。IE和Safari会以某种原因在新窗口中打开_blank链接,但这可能是一个老旧的行为,并不符合用户的偏好。我认为大多数用户甚至不知道如何在浏览器中设置此行为。 - Šime Vidas
4
简单的解决方案是不要试图强制你的链接在新标签页新窗口中打开。如果我想要新标签页,我会用中键点击,谢谢。 - bobince
4
访问者决定何时离开你的网站,而不是你。因此,即使你不想让他们离开也无济于事。如果访问者不想离开,他们可以进行中键点击(如@bobince所示)。如果他们离开并想回来,那么他们有一个返回按钮...和一个浏览器历史记录...和一个书签菜单...还有可能直接再次找到该网站。 - Quentin
17
您还忘记了一些网站在同一标签页中打开链接可能会很不方便。比如说您正在查看一封电子邮件,点击了一个链接,重新加载邮件会非常浪费时间。Gmail会强制将非本地链接在新标签页中打开。 - Chris
显示剩余3条评论

43

自从我遇到这个老问题后,发现现在可能已经可以实现了(也许当时还没有这种CSS选项),我只是想添加一个更新来说明如何完成:

<a href="[yourlink]" target="_blank" style="target-new: tab;">Google</a>

这里是target-new样式的选项:

target-new: window | tab | none 

我没有测试“none”选项,也许它使用默认的浏览器设置。

我已经确认了这一点适用于Firefox和IE7-9。


1
我有Safari 5.1.7(我认为这是Windows的最新版本),但它对我来说不起作用。也许这只适用于Safari 6+?有人能确认一下吗? - Mladen Janjetovic
3
嗯,这个并没有很好的记录,我在 caniuse.com 上查了一下,但是没有信息,定义在这里:http://www.w3.org/TR/css3-hyperlinks/#the-target-new。w3schools 表示它不被任何浏览器支持(http://www.w3schools.com/cssref/css3_pr_target-new.asp),但至少在 Firefox 和 IE 上可以使用,所以这是一个难以找到信息的问题... - Martin
1
http://www.w3schools.com/cssref/css3_pr_target-new.asp - Bill Bunting
2
这个定义甚至需要是疯狂的。为什么他们不会只为目标属性定义另一个值呢? - Dom Ramirez
2
对我也不起作用。 - neel shah
显示剩余5条评论

11
不,没有。

7
直截了当、明确的回答 =) 我真的想把这个答案编辑成只有“不”。 - earcam

8
我希望这能对你有所帮助。

使用window.open(url,'_newtab')可以在新标签页中打开指定的URL。


1
window.open返回一个windowObjectReference对象,该对象可以被重复使用(或者第二个参数窗口名称可以在后续调用中重复使用,以在同一标签页/窗口中加载不同的URL)。然而,这并不能回答问题——window.open没有提供强制使用选项卡或窗口的方法。 - earcam

2

我没有试过,但我认为它适用于所有浏览器:

target="_parent"


1
新标签页高度依赖于用户设置和浏览器代理。在网站设计中,不应该将“在新标签页中打开链接”作为必须要求,这是我们在过去一年中学到的经验教训。 - Moon

1
a {
    target-name: new;
    target-new: tab;
}

target-new属性指定新的目标链接应该在新窗口中打开还是在现有窗口的新选项卡中打开。

注意:只有当target-name属性创建新选项卡或新窗口时,target-new属性才有效。


1
它适用于最新的Firefox。 - user3242943
处理这个问题似乎在CSS中有些奇怪。我猜能够通过CSS选择器应用它很好,但这似乎违反了传统的关注点分离原则。 - Paul-Hebert

1
onclick="window.open(this.href,'_blank');return false;"

1

浏览器处理新窗口与新标签页的方式是在浏览器选项中设置的,只能由用户更改。


1
用户偏好是一回事,但我目前所学到的是,您需要为不同的浏览器设置不同的PHP方法。 - Moon
1
真的吗?你是如何用PHP实现的? - Moin Zaman

0

您可以在Safari > 首选项 > 标签页 > '在标签页中而非窗口中打开页面' > '自动',更改Safari打开新页面的方式。


0
在Internet Explorer中,点击“工具”->“Internet选项”。点击“常规”选项卡->“标签”->“设置”。选择“遇到弹出窗口时”->“始终在新标签页中打开弹出窗口”选项。点击“确定”。

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