target =“ _ blank”与target =“ _ new”


512

什么之间的区别<a target="_new">,并<a target="_blank">和我应该使用如果我只是想打开一个新标签/窗口的链接?


73
当前答案的摘要:_new没有任何特殊含义。您也可以写_white_little_lamb
阿尔瓦罗·冈萨雷斯

10
@ x3ro说“ _new”没有任何特殊含义怎么弄错?
阿尔瓦罗·冈萨雷斯

3
@ÁlvaroG.Vicario我指的是“您可以写...代替”。但是考虑到这一点,我认为“没有特殊含义”与“明确劝阻”并不相同,但这可能是我在挑剔;)
fresskoma 2014年

5
我想提醒大家,使用target="_blank"no rel="noopener"是潜在的安全漏洞。搜索rel="noopener"以了解更多信息。
Flimm

Answers:


651

使用“ _blank”

根据HTML5规范

一个有效的浏览上下文名称是至少一个字符的任何字符串,它不与U + 005F低线字符开头。(以下划线开头的名称保留用于特殊关键字。)

一个有效的浏览上下文名称或关键字是一个有效的浏览上下文名称的任何字符串或者是一个一个ASCII不区分大小写的匹配:_blank,_self,_parent,_top或“ - 来源

这意味着_new在HTML5中没有这样的关键字,在HTML4(因此也没有XHTML)中也没有。这意味着,如果将其用作目标属性的值,将不会有任何一致的行为。

安全建议

正如丹尼尔(Daniel)和迈克尔(Michael)在评论中指出的那样,当使用_blank指向不可信网站的目标时,还应该设置rel="noopener"。这样可以防止打开站点通过JavaScript破坏打开器。有关更多信息,请参见此帖子


7
从规范中删除粗体文本会使该报价听起来令人困惑。我将其读取为“ A valid browsing context name或关键字是a valid browsing context name或....的任何字符串”
Alex Grin

6
@ lyoshenka,@ x3ro:我可以自由地在引号中添加上一段。那应该消除混乱。
墨卡托

5
@aesede:阅读规格。他们是合法的,因为“my_custom_name”可以不以下划线前缀。因此,“ new”会很好,但“ _new”则不行!
fresskoma 2014年

7
在安全方面,这是重要的阅读内容mathiasbynens.github.io/rel-noopener
Daniel F

6
请考虑增加,人们还应该添加rel="noopener noreferrer"由于JavaScript的攻击漏洞target="_blank"
迈克尔

126

使用target="_blank"将指示浏览器在用户单击链接时创建新的浏览器选项卡或窗口。

target="_new"根据规范,使用在技​​术上是无效的,但据我所知,每种浏览器的行为方式都相同:

  • 它将搜索上下文名称为“ _new”的标签或窗口
  • 如果找到“ _new”标签/窗口,则将URL加载到其中
  • 如果未找到,则使用上下文名称“ _new”创建一个新的选项卡/窗口,并将URL加载到其中

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

更令人困惑的是,在HTML4中,该target属性已被弃用。在HTML5中,此决定被撤销,并且再次成为规范的正式组成部分。target无论您使用什么版本的HTML,所有浏览器都支持,但是如果您的文档类型是HTML4,则某些验证器会将其标记为已弃用。


4
因此,基本上,如果我有两个(或多个)链接target="_new",它们都将在同一选项卡中打开,一个覆盖另一个?
art-solopov

4
据我所知,@ art-solopov是的,这将在每种浏览器中发生。但是,“ _ new”是目标的非法值,因此不要这样做。
Abhi Beckert

25

TL; DR
USE _blank

target属性指定在何处打开链接的文档。

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个新选项卡。



14

之前可能有人问过这个问题,但:

“指定target =“ _ new的每个链接”将查找并按名称查找该窗口,然后在其中打开。

如果使用target =“ _ blank”,则每次都会在当前窗口的顶部创建一个全新的窗口。

从这里:http : //thedesignspace.net/MT2archives/000316.html


12

target="_blank" 在大多数浏览器中打开一个新标签。


12

据我了解,target = whatever它将查找具有该名称的框架/窗口。如果找不到,它将使用该名称打开一个新窗口。如果为whatever == "_new",则显示的外观与您使用过的_blank除外.....

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

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


9

注意-切记始终包含“引号”-至少在Chrome上target=_blank(不target="_blank"带引号)与(带引号)不一样。

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


很好的一点。我没有将_blank括在引号中时遇到了这个问题。我从新创建的“空白”标签中单击的链接覆盖了该标签中的内容,而不是打开新标签。将_blank括在引号中会强制chrome每次打开一个新标签页。
史蒂夫·谢勒

另外,请确保使用“ _blank”而不是“ _BLANK”。Chrome实际上对大小写很挑剔,不会多次使用“ _BLANK”打开新标签页。
史蒂夫·谢勒

5
  • _blank作为目标值每次都会产生一个新窗口,
  • _new将仅产生一个新窗口。

同样,单击目标值为_new的每个链接都将替换先前生成的窗口中加载的页面。

您可以单击此处何时使用_blank或_new自己尝试一下。


您能否列出_new所描述的浏览器?
Dima Tisnek

@qarma这种行为正如我所知道的所有浏览器中所描述的那样,_new不是一个神奇的关键字,它只是一个名称,如果存在具有该名称的窗口,它将重用它,否则它将打开它。单击该窗口的多个链接只会在命名窗口中打开不同的页面,而不是打开多个新页面。
scragar's

该规范实际上向浏览器建议它们的ignore目标是下划线,但不是关键字。对于“忽略”无效目标名称时浏览器应采取的措施,没有任何建议。可能的情况包括:(1)像“ _blank”一样对待它(2)像一个窗口名一样对待它(好像没有非法的下划线一样)(3)像一个明显的空窗口名一样对待它(4)像在那儿一样对待它没有目标属性。-任何浏览器都可以选择任何一种解释。
Jesse Chisholm 2015年

0

链接的target属性强制浏览器在新的浏览器窗口中打开目标页面。使用_blank作为目标值,将同时使用,每次产生一个新的窗口_new将只产卵一个新窗口,用的目标值,点击每一个环节_new将取代以前催生窗口中加载该页面


0

为了在新标签页/窗口中打开链接,您将使用<a target="_blank">

_blank=定向的浏览上下文:一个新的:根据您的浏览设置的选项卡或窗口

_new=无效;HTML5中元素上的target属性没有这样的值

目标属性及其在元素上的所有值:视频演示


-1

在iframe页面上使用_New很有用。由于target =“ _ blank”不能解决问题,而是在同一iframe上打开页面,因此target new是iframe页面的最佳解决方案。只是我的五分钱。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.