target="_blank"和target="_new"的区别

546
<a target="_new">”和“<a target="_blank">”有什么区别,如果我只是想在新的标签页/窗口中打开链接,应该使用哪个?

84
目前回答的摘要是:_new 没有任何特殊含义。你也可以写成 _white_little_lamb - Álvaro González
11
那么说“_new”没有任何特殊含义是错误的,这句话怎么解释呢? - Álvaro González
3
@ÁlvaroG.Vicario 我指的是“你可以写...而不是”。但是想一想,我会认为“没有特殊含义”和“明确不鼓励”并不相同,但这可能只是我在挑剔。 ;) - fresskoma
11
我想提醒大家,使用 target="_blank" 而不添加 rel="noopener" 是一种潜在的安全漏洞。搜索 rel="noopener" 以了解更多信息。 - Flimm
12个回答

687

使用 "_blank"

根据 HTML5 规范:

有效的浏览上下文名称 是任何以不带 U+005F LOW LINE 字符开头并且至少有一个字符的字符串。(以下划线开头的名称为特殊关键字。)

有效的浏览上下文名称或关键字 是任何既是有效的浏览上下文名称,或者是 ASCII 不区分大小写匹配以下其中之一的字符串:_blank、_self、_parent 或 _top。" - 来源

这意味着,在 HTML5 中没有名为 _new 的关键字,并且HTML4(因此也包括 XHTML)中也没有该关键字。 这意味着,如果将其用作 target 属性的值,则不会有任何一致的行为。

安全建议

正如 Daniel 和 Michael 在评论中指出的那样,当使用 target _blank 指向一个不受信任的网站时,您应该额外设置 rel="noopener"。这可以防止打开的站点通过 JavaScript 干扰打开者。有关更多信息,请参见此文章


8
如果省略规范中加粗的文本,该引用听起来会令人感到困惑和循环。 我将其解读为“有效的浏览上下文名称或关键字是任何字符串,既可以是有效的浏览上下文名称,也可以是......”。请注意,翻译保持了原文的意思,并尽可能使语言更通俗易懂。 - Alex Grin
7
@lyoshenka,@x3ro:我冒昧地将前一段落添加到引用中。这可以消除混乱。 - mercator
6
阅读规范。它们不是有效的,因为“my_custom_name”不能以下划线开头。因此,“new”是可以的,但“_new”不行! - fresskoma
8
从安全角度来看,这篇文章值得一读:http://mathiasbynens.github.io/rel-noopener/ - Daniel F
7
请考虑添加提示,让用户在使用target="_blank"时也应该加上rel="noopener noreferrer",以防止javascript攻击漏洞 - Michael
显示剩余9条评论

139

使用target="_blank"会指示浏览器在用户点击链接时创建一个新的浏览器标签页或窗口。

使用target="_new"在技术上是无效的,但据我所知,每个浏览器都会以相同的方式处理:

  • 它将搜索具有上下文名称"_new"的标签页或窗口
  • 如果找到了"_new"标签页/窗口,则将URL加载到其中
  • 如果没有找到,则创建一个具有上下文名称"_new"的新标签页/窗口,并将URL加载到其中

请注意,target="_new"target="new"的行为完全相同,而后者是有效的HTML,而前者是无效的HTML。

增加一些混淆的是,在HTML4中,target属性已被弃用。在HTML5中,这个决定被撤销了,它再次成为规范的正式部分。所有浏览器都支持target,无论您使用的HTML版本是什么,但某些验证器会在您的doctype为HTML4时标记使用为已弃用。


5
基本上,如果我有两个或更多带有target="_new"的链接,它们都会在同一个标签页中打开,其中一个会覆盖另一个? - art-solopov
6
据我所知,是的,在每个浏览器中都会发生这种情况。然而,“_new”是一个非法的目标值,所以不要这样做。 - Abhi Beckert

29

简而言之
使用_blank

目标属性指定了链接文档在哪里打开。

USAGE: target="xyz"  [don't forget double quotes]

_blank  Opens the linked document in a new window or tab
_self   Opens the linked document in the same frame as it was clicked (this is default)
_parent     Opens the linked document in the parent frame
_top    Opens the linked document in the full body of the window 
framename   Opens the linked document in a named frame

由于"_new"不是这些选项之一,因此它将被归类为"framename",所以如果用户重新点击该超链接,则不会打开新选项卡,而是更新现有选项卡。而在_blank中,如果用户点击两次,则会打开2个新的选项卡。


26

我知道这是一个老问题并且正确的答案是使用_blank,已经被提到了多次,但是使用<a target="somesite.com" target="_blank">Link</a>存在安全风险。

推荐使用(没有引用)性能优势),使用以下内容:

<a href="somesite.com" target="_blank" rel="noopener noreferrer">Link</a>

1
以下是有关安全风险方面的一些额外阅读材料:https://www.jitbit.com/alexblog/256-targetblank---the-most-underestimated-vulnerability-ever/ - 8bithero

15
这可能已经被问过了,但是:
如果链接使用 target="_new" 指定打开的窗口名称,浏览器将查找并在该窗口中打开链接。
如果使用 target="_blank",每次都会创建一个全新的窗口,覆盖当前窗口。
参考来源:http://thedesignspace.net/MT2archives/000316.html

14

据我理解,target = whatever 将会查找具有该名称的框架/窗口。 如果未找到,则将打开具有该名称的新窗口。 如果 whatever == "_new",它将与使用 _blank 相同,除非......

使用其中一个保留的目标名称将绕过“查找”阶段。 因此,在十几个链接上使用 target = "_blank" 将打开十几个空白窗口,但是在十几个链接上使用 target = whatever 将只打开一个窗口。 在十几个链接上使用 target = "_new" 可能会导致不一致的行为。 我还没有在多个浏览器上尝试过它,但应该只会打开一个窗口。

至少这是我理解规则的方式。


13

target="_blank" 在大多数浏览器中会在新标签页中打开链接。


11

注意 - 记得始终包含“引号”- 至少在Chrome中,target=_blank(无引号)与target="_blank"(有引号)不同。

后者会在新的选项卡/窗口中打开每个链接。而前者(缺少引号)会在一个新的选项卡/窗口中打开您单击的第一个链接,然后用具有相同名称的每个后续链接覆盖同一选项卡/窗口(这也缺少引号)。


非常好的观点。当我没有用引号括起来_blank时,我遇到了这个问题。从新创建的“空白”选项卡中单击的链接覆盖了该选项卡中的内容,而不是打开一个新选项卡。用引号括起来的_blank每次都会强制Chrome打开一个新选项卡。 - Steve Scherer
另外,请确保使用"_blank"而不是"_BLANK"。Chrome对大小写非常挑剔,多次使用"_BLANK"将无法打开新选项卡。 - Steve Scherer
不确定这篇文章是否仍然相关(我使用FF,所以无法检查),但如果仍然正确,那么这违反了未引用属性值规范;基本上,任何不是大于号或空格的字符都是可接受的未引用属性值字符(但有些可能会产生解析错误)。 - Cole Tobin

5
  • 使用_blank作为目标值会每次生成一个新窗口,
  • _new只会生成一个新窗口。

此外,每个带有_new目标值的链接将替换先前生成的窗口中加载的页面。

您可以单击此处了解何时使用_blank或_new并自行尝试。


你能列出哪些浏览器遵循了_new的描述吗? - Dima Tisnek
@qarma,我所知道的所有浏览器都是这样描述的行为,“_new”不是一个神奇的关键字,它只是一个名称,如果存在具有该名称的窗口,它将重用它,否则它将打开它。单击该窗口的多个链接将在命名窗口中打开不同的页面,而不是打开多个新页面。 - scragar
2
规范实际上建议浏览器“忽略”以下划线开头但不是关键字的目标。当浏览器“忽略”无效的目标名称时,没有建议应该采取什么行动。可能的选择包括:(1)将其视为“_blank”(2)将其视为窗口名称(好像没有非法下划线)(3)将其视为空显式窗口名称(4)将其视为没有目标属性。-- 任何浏览器都可以选择任何解释。 - Jesse Chisholm

0
为了在新的选项卡/窗口中打开链接,您将使用<a target="_blank">
_blank=目标浏览上下文:一个新的选项卡或窗口,具体取决于您的浏览设置
_new=无效;HTML5中对元素的target属性没有这样的值
带有其所有值的目标属性的元素:视频演示

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