`
Classicning
  • 浏览: 250680 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

由target属性说开

    博客分类:
  • WEB
阅读更多

前两天毅博客上有一篇介绍详解target和rel属性的文章《详解链接的rel与target》,我读过之后有一种茅塞顿开的感觉。


曾几何时(就是去年的这个时候),我印象中是web标准刚刚火起来没有多久,一个很让人不能接受的现实问题出现了。target属性已经不在xhtml1.0 strict的DTD中了,一时间很多人为此苦恼。因为抛弃target是不可想象的,而保留它则意味着不能将那一小小的光荣的xhml1.0 strict图标放在自己网页上显摆。


于是就诞生了这么一种发法,用上rel属性,把值设为external(rel有没有这个值还很难说)。然后在window.onload的时候用js遍历整个文档中的a,如果找到rel,则在DOM中加上target="_blank",代码大约是如下吧:

function addTarget(){
  var anchors = document.getElementsByTagName("a");
  for(var i=0;i<anchors.length;i++){
    var anchor = anchors[i];
    if("external" == anchor.getAttribute("rel")){
      anchor.setAttribute("target","_blank");
    }
  }
}

这么一来既实现了既骗过验证,又有blank效果,我的静态主页里用的就是这种方法,现在虽然很鄙视,但是没有时间去搞他了。扯远了。


那么我们看一看为什么target被弃用了。
两方面,一是UE的方面。传说新开窗口是一件及其危险的事情,可能导致很多不可知事件的发生,轻则(我想大家都经理过)死机,重则出现什么危险也不是不可能。关于UE我不想多说,因为UE是个缥缈的概念,即便是你通过了508的验证,你的网站也不见得是对每一个用户都友好的(我敢说没有target的UE是更加垃圾的)。但是值得一说的是,这方面诞生了一个不错的例子,就target="window_name"。给新窗口起一个名字。这样今后打开外部窗口时就可以自由选择是新开,还是在已有的外部窗口打开。这样做大大地增加了页面作者对页面的控制能力,也不会造成到处都是新窗口的局面。比较典型的网站就是第二书店的图书搜索到图书浏览的链接和毅博客首页的链接。我想这也是target能够做到的UE的极致了,尽管如此,target还是不符合标准。


那么为什么呢,我们要从标准的更深层次来看target。W3C发布网页标准的目的是为了规范当时混乱的局面,以提高网页的可访问性,保证对各种UA的兼容从最普通的IE到FF,到手机上的浏览器,到传说中的文字浏览器、声音浏览器等等。这样target的地位受到了严重的挑战。因为有些浏览器根本不支持框架,框架被W3C弃用,于是target的很多属性值_parent,_self也随之退出历史舞台。而在一些手机等UA上,根本就没有_blank这么一回事,所以在一定程度上又为target降低了分数。
W3C的网页标准让网页越来越像是一个文档,它本身具有极强的层次性、可读性,标题、列表、段落等等,这些似乎都和传统的文档要素完全吻合。而那些最终必须服务于浏览器的属性呢,W3C将它们尽可能抽象,比如alt,比如title,甚至比如未来的rel;同时,原本过于具体的width,height等就理所当然地遭到了弃用。某种程度上说,抽象意味着低耦合。其实从这一方面上来说,网页标准其实仅仅迈出了小小的一步,未来的路还长。


最后我还要阐释这么一个观点:“写自己的html,让浏览器去解析吧!”
当然,如过你是真正的从业者,你肯定无法做到这么豁达,你要为cross-browser浪费掉一天有一天。但是W3C一定是这么认为的,或许他们不敢承认。
网页,我们只能做到html,之后怎样把html展现成图形就不是我们所能负责的了。其实,哪个网页设计师关心文档的样子啊,绝大多数人在乎的都是浏览器窗口里的模样,这才是为什么我们WYSIWYG。那么现在html有W3C的标准了,但是解析html有标准吗?有事实标准,约定俗成,但是没有书面文稿和详细规定。
于是M$的IE把alt属性解析到tip里,害苦了一代热衷网页设计的青少年;同样的size=12的密码框和文本框,IE6就是把它解析得一大一小,你有什么办法?这些都完完全全地脱离了我们所能控制的范围,css和js都对它无能为力,标准更是鞭长莫及。
Web标准通过浏览器来执行,所以浏览器们有决定权,而W3C也不可能因此将IE6的那群开发者告上法庭要他们赔偿全球网页设计制作者的青春损失费。
那么我们是做标准还是做网页呢,或者说是为标准做还是为浏览器做呢,我想大家都应该心知肚明。

如果你是做网页,那么就大胆地用target;如果你仅仅为了获得标准验证通过的图标,那就坚决地弃用target,好好写accesskey,tabindex和rel吧!没有什么对与错,就比如你要找工作,那么就应该学习一些实际的本事,掌握真正能创造价值的能力;如果要考验,嘿嘿,您还是埋头读那些课本吧,好好受“教育”。

而我同样可以yy未来会有一种完全自定义的浏览器——当target已经为广大标准FQ唾弃的时候——自动在新窗口打开rel="external"的链接。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics