是否要使用target=_blank,这是一个问题!

30

链接到外部网站时,是否应该设置target=_blank属性呢?例如,我在www.acme.net上并有一个指向www.otherplace.net的链接,那么这个链接应该是:

<a href='http://www.otherplace.net' target='_blank'>otherplace's website</a>

还是:

<a href='http://www.otherplace.net'>otherplace's website</a>

我之前以为对于自己域名之外的网站,使用_blank是最佳实践,但现在被告知不是这样。


2
谁告诉你相反的事情,并用什么论据? - Pekka
3
有人反对此做法的一个理由是,这会剥夺用户一定程度的控制权,更好的方式是让用户决定他们的链接是否要在新窗口/标签页中打开。 - Matthew Wilson
3
有人告诉我,根据无障碍指南,不应在新窗口中打开链接。由于这是政府网站,因此需要保证无障碍性。 - JohnnyBizzle
3
打开新窗口是Jakob Nielsen网页设计十大错误之一(http://www.useit.com/alertbox/9605.html),但我承认他并非广受欢迎的人... - Phil Jenkins
5
@Phil Nielsen在某些时候说得有道理,但对于外部链接,打开一个新窗口就是一种自我防御 - 无数用户不知道如何导航回原来的网站。 - Pekka
显示剩余8条评论
8个回答

19

有些网站理想主义者会说,当涉及到导航时,您应该允许用户自己做出选择 - 我非常同情这种观点。作为Web开发人员,我们不应该强迫访问者做出这些决定。

然而,我也知道企业经常希望“保留控制权”,因此坚持为外部站点生成新的选项卡/窗口。我也能理解这一点 - 这是一种非常实用的方法,特别是考虑到有多少用户不知道如何控制自己的UA。

我经常倾向于在两者之间寻找平衡,通过添加图像(我相信你在此期间已经看到了很多)来指示哪些链接是外部链接,并添加注释以表明外部链接将在新的选项卡/窗口中打开。

这并不像第一个选项那样“纯粹”,但至少对用户来说,网站的行为是清晰的。


2
对于让用户清楚地了解网站行为的重要性,我们应该给予+1。那些找不到返回按钮(通常位于主要位置)的用户同样容易被一些链接“随意”在新窗口中打开而感到困惑。 - Roger Pate
在链接旁添加了图片和文本:(链接在新窗口中打开) - JohnnyBizzle

12

我在w3c网站上找到了这篇文章

本部分的检查点:

•10.1 在用户代理程序允许用户关闭弹出窗口之前,请不要引起弹出窗口或其他窗口的出现,并且不要在未告知用户的情况下更改当前窗口。[优先级2]内容开发者应避免将新窗口指定为 target="_blank" 框架的目标。

更多信息请点击此处

你需要问客户的问题是,“你的优先级目标是什么?”


2
那些是内容无障碍指南。这是一份宝贵的资源,在构建无障碍网站时必不可少。但它并不像HTML规范那样是一个约束性的标准。 - Pekka
2
JohnnyBizzle说:“我被告知在新窗口中打开不符合无障碍指南。”因此,查看无障碍指南是一个好的地方,以确定他所听到的是否正确。 - Antony Delaney

4

我认为这完全取决于您的使用情况。

如果您要在另一个域中打开网站并保持您的网站打开状态,我认为在大多数情况下您需要使用target='_blank'。

作为用户,当我点击链接到另一个域时,它将我从原始域中移动,我觉得这很烦人。当然,在大多数浏览器中使用ctrl+click是一种防御方式,但为什么要让用户做更多的工作呢?


2
抱歉,但那是错误的。你不想让用户做更多的工作;这没关系。但我个人讨厌网站打开新窗口。在这种情况下,我没有选择是否应该在新窗口、新标签页或同一标签页中打开页面。它只是打开了。 如果你不使用target='_blank',用户可以决定页面是否应该在同一标签页(单击)、另一个标签页(ctrl+单击/右键单击“在新标签页中打开”)或新窗口(右键单击“在新窗口中打开”)中打开。 - fabsn
就像我说的那样,它是上下文敏感的。抱歉,但你不能根据个人意见说我是错误的。话虽如此,在连续一年思考这个问题之后——我同意让用户控制链接的方式是很好的想法 :-)。 - Mike G

3
也许值得一提的是,使用target属性不符合xhtml标准。我通常会在外部窗口或选项卡中打开链接,因为我发现大多数普通用户(而非高级用户)希望以这种方式进行操作,以便他们始终可以返回到原来的网站 - 通常他们会深入到其他网站中,然后再次点击返回按钮变得不友好。
因此,就可用性而言,我认为有更多的用户不使用特殊技巧手动打开新窗口/选项卡。
关于xhtml验证,您可能希望使用rel =“external”或类似的词来装饰链接,然后使用此JS函数处理新窗口打开。在过去的几年中,我99%的时间都是这样做的。
function externalLinks() {
    if (!document.getElementsByTagName) return;
    var anchors = document.getElementsByTagName("a");
    for (var i = 0; i < anchors.length; i++) {
        var anchor = anchors[i];
        if (anchor.getAttribute("href") &&
       anchor.getAttribute("rel") == "external")
            anchor.target = "_blank";
    }
}

/**
    DOCUMENT LOAD
**/
$(document).ready(function () {
    /** 
        external links
    **/
    externalLinks();
....

那么,你的问题具体是什么? - mare
@alohci:external只是我在关联中使用的一个词,用于标识JS代码应该捕获的那些链接。External并不意味着外部站点,它意味着外部(或新)窗口。 - mare
3
谈论“狗摇尾巴”的现象。验证很有用,但只是达到目的的手段。您添加了一些不必要的JavaScript来欺骗验证器,以便您呈现有效的XHTML。更好的解决方案是a)不使用目标属性,b)使用HTML(5)或c)简单地接受您的网站99%“有效”,而无需进行调整即可正常工作。 - CJM
1
注意:根据此文档http://dev.w3.org/html5/spec/Overview.html#the-a-element,HTML5中的target属性并未被弃用。 - CJM
就我个人而言,我一直喜欢目标属性。但我也喜欢验证我的网站。对我来说,验证是发布网站在线时必须遵守的基准。为了满足这两个要求,人们发明了这种JS技术,它运作良好。如果有人不想使用它,我也无所谓。关于HTML5,我认为并不是每个人都准备好开始使用HTML5进行开发——这种转变需要时间和金钱。 - mare
显示剩余3条评论

3

不要这么做。在链接中使用target属性会给辅助技术用户带来麻烦,他们可能不知道另一个标签页已经打开。当回退按钮无法在新标签页中起作用时,这对这些用户来说是一个糟糕的体验,他们无法返回到他们开始浏览的页面。这种做法也会让认知障碍者感到迷惑。最好让用户决定链接在哪里打开。


2
您需要预测用户的需求。如果您希望用户留在网站上,可以使用target="_blank"
例如,如果博客文章中间有一个链接,那么在新选项卡中打开该链接是有意义的,因为您希望读者返回页面并继续阅读。
有人认为,读者可以单击“返回”按钮以返回页面,
但是,新的网页将具有更多链接到具有更多链接的网页,结果读者必须“返回”几次才能返回您的博客文章。要么这样,要么他就会被“迷失”在各种链接的网页中,找不回到您的博客文章(除非有一个很大的激励措施促使他们回到您的页面)。

1

为您的用户制作两个按钮:一个用于在新标签页中打开,另一个用于放弃当前页面并转向链接页面。

[ www.google.com ] [打开 Google 替代此页面]


1

由于这是政府网站,所以这是一个棘手的问题。我经常在这些类型的网站上看到外部网站的免责声明。我不知道这是否是标准做法。

我认为答案可能取决于您自己的意见,这意见可能应该基于可用性和完整性。


没错!用户是否清楚地知道他们正在访问另一个站点,不一定是由您创建或提供的内容?但另一方面,如果用户想要,右键单击并在新窗口中打开则很容易。 - JohnnyBizzle
@aaronmase:你的政府还是我的政府? - CJM
在我这种情况下(国民保健服务),英国政府。 - JohnnyBizzle
通过我的解决方案(或Nick Craver的解决方案),您可以轻松地连接消息框(警告窗口),告诉访问者他正在离开当前网站。 - mare
@Johnny - 我的意思是这是一个跨国网站,没有覆盖我们所有人的“政府网站行为准则”。 - CJM

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