我觉得target="_blank" 的使用是一门很深的学问,千万不要对于所有的元素都一概而论,打个比方:比如google在处理分页的时候使用target="_blank",想象一下会是什么样的后果;而在处理搜索结果列表的时候使用target="_blank"却又是一件很惬意的事。所以得针对不同的对象谨慎使用target="_blank"。
整理了一下个人觉target="_blank"的使用需要注意的地方:
1,正文的注解一般都target="_blank";(让用户为了注解而离开正文是件比较傻的事,一般新闻网站都会强行使正文中的链接都target="_blank"。)
2,站外链接尽量使用target="_blank";(这个不用解释了吧)
3,表单页面的中的target="_blank"最应该谨慎使用;
4,针对同样元素要一视同仁,别上一个列表用target="_blank"下一个列表就不用,同样对于导航这样的重要的元素要特别重视。
原则差不多就是:内容与当前内容关联性不大可使用target="_blank",离开本页会对用户产生损失一定要使用target="_blank",特别是返回上一页已经不能还原当时内容的情况,所以视频网站在这方面下足了功夫,可以多学习下此类网站关于target="_blank"的用法。
另外我不认为使用或者不使用target="_blank"是绑架用户,什么都不思考什么都不做才是对不起用户,个人意见。其实国外的网页操作“心智模型”是没有打开个新的页面的,Jackon Nielsen有篇文章
《Avoid Within-Page Links》,里面讲到用户对链接的心智模型应该是这样的:
1、点击一个链接应该跳转到一个新的页面;
2、点击了一个链接,老的页面不应该还在;
3、新页面替代了老页面;
4、你一眼看到的应该是新页面;
5、有个后退按钮可以让你退回老页面;
所以,如果你去Amazon看,上面所有商品点击都是直接跳转,这跟淘宝截然不同。
比较有趣的是,google英文和中文站不一样,点击一个搜索结果,中国站会弹出新窗口,而英文站,一律都是当前页刷新,即交互反馈不一样。
所以,我认为用不用target=_blank,在大的层面,考虑使用人群差异和文化环境;
其次,考虑产品当前链接的使用情况,例如不破坏当前操作流的,就不应该使用。而例如帮助信息,与当前用户使用不产生影响的,可以使用。
结合window.opener存在漏洞,请自测:
假设有页面a.html和b.html,在b页面中加入以下内容,a中通过target="_blank"打开b页面
if (window.opener) {
opener.location = "https://www.jottown.com"
alert("存在漏洞!看看a页面")
} else {
alert("不存在漏洞!")
}
懒人版:
a.html
Document
aa
b.html
Document
大半夜不睡的,就为了讨个赞,有啥问题可以去https://jottown.com找我