【问题标题】:target="_blank" vs. target="_new"target="_blank" 与 target="_new"
【发布时间】:2011-06-25 05:57:51
【问题描述】:

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

【问题讨论】:

  • 当前回答者总结:_new 没有任何特殊含义。你也可以写_white_little_lamb
  • @x3ro 说“_new”没有任何特殊含义是怎么回事?
  • @ÁlvaroG.Vicario 我指的是“你可以写......而不是”。但是考虑到这一点,我认为“没有特殊含义”与“明确不鼓励”不同,但这可能是我吹毛求疵 ;)
  • 我想提醒大家,使用target="_blank"而不使用rel="noopener"是一个潜在的安全漏洞。搜索rel="noopener"了解更多信息。

标签: html


【解决方案1】:

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

使用的是recommended(performance benefits):

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

【讨论】:

【解决方案2】:

使用“_blank”

根据HTML5 Spec

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

有效的浏览上下文名称或关键字是任何字符串,它要么是有效的浏览上下文名称,要么是不区分大小写的 ASCII 匹配项:_blank、_self、_parent 或 _top。 " - Source

这意味着HTML5中没有_newnot in HTML4 (and consequently XHTML) either这样的关键字。这意味着,如果您将其用作目标属性的值,将不会有任何一致的行为。

安全建议

正如 Daniel 和 Michael 在 cmets 中指出的那样,当使用目标 _blank 指向不受信任的网站时,您还应该设置 rel="noopener"。这可以防止打开站点通过 JavaScript 与打开器混淆。请参阅this post 了解更多信息。

【讨论】:

  • 从规范中省略粗体文本会使引用听起来令人困惑。我将其读作“valid browsing context name 或关键字是valid browsing context name 或...的任何字符串。”
  • @lyoshenka, @x3ro:我冒昧地将前一段添加到引用中。这应该可以消除混乱。
  • @aesede:阅读规范。它们无效有效,因为“my_custom_name”可能没有下划线前缀。因此“new”可以,但“_new”不是!
  • 安全方面,这是一本重要的读物mathiasbynens.github.io/rel-noopener
  • 请考虑添加,由于javascript attack vulnerability of target="_blank",人们也应该添加rel="noopener noreferrer"
【解决方案3】:

在处理 Iframed 页面时,使用 _New 非常有用。由于 target="_blank" 没有做到这一点并在同一个 iframe 上打开页面...... target new 是 iframe 页面的最佳解决方案。只是我的五分钱。

【讨论】:

    【解决方案4】:

    TL;DR
    使用 _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 个新标签。

    【讨论】:

      【解决方案5】:

      要在新标签/窗口中打开链接,您将使用&lt;a target="_blank"&gt;

      _blank = 目标浏览上下文:一个新的:选项卡或窗口,具体取决于您的浏览设置

      _new = 无效;在 HTML5 中,元素的目标属性没有这样的值

      目标属性及其所有值都在一个元素上:video demo

      【讨论】:

        【解决方案6】:

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

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

        【讨论】:

        • 非常好。当我没有将 _blank 括在引号中时,我遇到了这个问题。我从新创建的“空白”选项卡中单击的链接是在该选项卡中写入内容而不是打开新选项卡。将 _blank 括在引号中会强制 chrome 每次打开一个新选项卡。
        • 另外,请确保使用“_blank”而不是“_BLANK”。 Chrome实际上对大小写很挑剔,不会多次使用“_BLANK”打开新标签。
        【解决方案7】:
        • _blank 作为目标值,每次都会产生一个新窗口,
        • _new 只会产生一个新窗口。

        此外,目标值为 _new 的每个点击链接都将替换之前生成的窗口中加载的页面。

        您可以点击这里When to use _blank or _new自己尝试一下。

        【讨论】:

        • 你能按照描述列出哪些浏览器支持_new吗?
        • @qarma 这种行为在我所知道的所有浏览器中都有描述,_new 不是一个神奇的关键字,它只是一个名称,如果存在具有该名称的窗口,它将重用它,否则它会打开它。单击该窗口的多个链接只会在命名窗口中打开不同的页面,而不是打开多个新页面。
        • 规范实际上向浏览器建议他们ignore 的目标是以下划线开头但不是关键字。当浏览器“忽略”一个无效的目标名称时,没有建议应该做什么。可能性包括:(1)将其视为“_blank”(2)将其视为窗口名称(好像没有非法下划线)(3)将其视为明确为空的窗口名称(4)将其视为那里没有目标属性。 -- 任何浏览器都可以选择任何一种解释。
        【解决方案8】:

        据我了解,target = whatever 将寻找具有该名称的框架/窗口。如果找不到,它将打开一个具有该名称的新窗口。如果是whatever == "_new",它看起来就像你使用了_blank,除了.....

        使用保留的目标名称之一将绕过“查找”阶段。所以,target = "_blank" 在十几个链接上会打开十几个空白窗口,但target = whatever 在十几个链接上只会打开一个窗口。十几个链接上的target = "_new" 可能会产生反复无常的行为。我没有在几个浏览器上尝试过,但应该只打开一个窗口。

        至少我是这样解释规则的。

        【讨论】:

          【解决方案9】:

          链接的目标属性强制浏览器在新的浏览器窗口中打开目标页面。使用_blank 作为目标值每次都会产生一个新窗口,而使用_new 只会产生一个新窗口,并且以_new 的目标值单击的每个链接都将替换在先前产生的窗口中加载的页面

          【讨论】:

            【解决方案10】:

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

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

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

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

            为此添加了一些混乱,在 HTML4 中,target 属性已被弃用。在 HTML5 中,这一决定被推翻,它再次成为规范的官方部分。无论您使用什么版本的 HTML,所有浏览器都支持 target,但如果您的文档类型是 HTML4,一些验证器会将其标记为已弃用。

            【讨论】:

            • 所以,基本上,如果我有两个(或更多)与target="_new" 的链接,它们都会在同一个选项卡中打开,一个会覆盖另一个?
            • @art-solopov 据我所知,是的,每个浏览器都会发生这种情况。但是“_new”对于目标来说是非法值,所以不要这样做。
            【解决方案11】:

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

            【讨论】:

              【解决方案12】:

              这可能以前被问过,但是:

              “每个指定 target="_new" 的链接都会按名称查找并找到该窗口,并在其中打开。

              如果您使用 target="_blank,则每次都会在当前窗口的顶部创建一个全新的窗口。"

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-06-12
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2020-11-19
                • 1970-01-01
                相关资源
                最近更新 更多