文章·资料 电脑软件 手机应用 网站源码




    本 站 搜 索
   推 荐 文 章        More...
华硕易电脑(ASUS Eee PC 1025C..
先来段开场白:为了外出携带方便,到淘..
Acronis True Image 使用说明
  一款可以在Windows下使用全部功..
Norton Ghost 使用详解
一、分区备份   使用Ghost进行系..
    文 章 阅 读 排 行
手机视频监控 APP 关闭广告:萤..
一、萤石云视频:我的,设置,隐私设置,..
常见数据库介绍与对比(SQL Serv..
常见数据库的对比分析,涵盖你提到的 A..
Windows 系统修改默认文件类型..
Windows 系统文件类型图标,通常由默..
Windows 系统安装或备份时 ISO,..
【ISO 文件】 ISO 文件其实就是光..
Microsoft SQL Server 2000 Per..
  对于第一次安装 Microsoft SQL Se..
颜色与英文单词对照
颜色与英文单词对照 red green bl..
PakePlus 构建 APP 需要 Github..
PakePlus 是一个基于 Rust Tauri 的..
主页真的越Google、越简洁越好吗
  如果你在11月10日早上打开雅虎中..
网络工程师必懂的专业术语
路由器问题:1、什么时候使用多路由协..
为啥现在的电脑都不能安装 Wind..
说实话,这几年如果你尝试在新电脑..
 文 章 信 息
我对 XHTML 不支持 target 属性的联想
评论()〗〖留言〗〖收藏
〖文章分类:电脑·手机·网络 / 网站设计·开发·优化〗〖阅读选项
  前些日子,本着好奇去下载了微软的 Expression Studio 试用(还不错用),用 Expression Web 的时候,因为它会自动检测文档标准,而我惯用的 Doctype 是 XHTML 1.0 S,结果,我在n多 a 标签的 target 属性下看到了熟悉的红色波浪线……

  XHTML 从 1.0 Strict 开始就不在允许在a标签中使用 target 属性了,以前在研究 XHTML 1.1 的时候曾经遇到过这个问题,但是后来渐渐被我遗忘了。于是我又回头去网上查找了各种解决方法,也参考了一些前辈们的想法,而这些想法也改变了我对这件事的认识。

  我们知道,a 标签的 target 属性一般最常用于两个地方,一个是控制链接在新标签页(窗口)中打开,另一个则是控制链接在指定的 frame、iframe、弹出窗口中打开。

  事实上,W3C委员会是一开始就反对在a标签中使用target。也许有人要问,如果没有target,怎么才能让页面在新标签页或者新窗口中弹出呢?W3C委员会的答复是:设计者没有权利决定用户用什么方式打开页面!

  是的!这才是最大的关键所在!经常翻墙上国外Google的朋友也许会有这个印象,英文版的google.com的搜索结果,是在当前页面直接打开的,而不论当年的google.cn还是现在的google.com.hk,都是默认在新标签页中打开的。事实上,正常情况下,所有页面都应该是在当前标签页内打开,哪怕是跨站的链接,如果用户需要从新标签页中打开,他应该很习惯于从右键菜单中选择,或者按住 Ctrl + 单击,又或者一些浏览器中是 Ctrl + Shift + 单击去打开页面。而国内网民们却似乎完全没有这样的习惯,一方面他们习惯于被各种网站上混乱的链接打开方式左右,另一方面,受到这种用户习惯的影响,网页开发人员也只能遵循这一规矩,如果不在链接里加上 target 属性,反而会被客户或项目经理骂吧,而结果就是越走越远的恶性循环而已。

  明白了正确的思考方式,再回头来考虑解决方法,当然也时刻不能忘记 HTML 语义化、对人对机器都友好的初衷,那么网上盛传的集中解决方法,哪一种更合适呢?

  网上现在一般有2大类解决方法,其中第一种比较冷门,也比较有技术含量了,那就是扩展 DTD。我曾经在一位国人前辈的博客上见过这一解决方法的详细教程,老实说,我基本看不懂。不过 DOCTYPE 可以扩展这件事我倒是知道,似乎官方的规范介绍里就有强调这点。这位前辈在 DOCTYPE 中,除了原有的 DTD 外,再额外加上自己定义的扩展 DTD,从而重新加入 target 属性。这种方法从技术角度来看,似乎是最强大的,但是它也有一个缺点——从本质上来说这其实就是一种规范的倒退,如果不得不通过扩展 DOCTYPE 去实现原先 XHTML 1.0 T 里包括,而在 XHTML 1.0 S 中删除的属性的话,还不如直接使用 XHTML 1.0 T 算了。

  另一大类方法就是用 Javascript 去解决了,当然使用 Javascript 也有几种不同的用法,其中一种最笨的办法就是在每个链接里写上 onclick 属性,纯粹用 onclick 去打开窗口,但是这种做法显然弊端很多,首先是工作量很大、不便于维护,另外用户复制链接地址也会失效,而且一旦客户端发生 Javascript 运行错误,或者用户禁用了 Javascript,那整个网站就完全无法使用了。

  另一种方法这是用 Javascript 获取整个页面所有的链接元素,然后根据这些链接是否被赋予某个特定的属性,而决定是否要给它附加 onclick 事件。而这个“特定的属性”,一般最常见的是用class。而根据上文的分析,除了 class 属性外,我们还有一个更合适的、更符合语义的、对机器更友好的、更面向未来的属性可用,那就是 rel——对链接赋予一个特定的 rel 属性,说明目标网页与本站之间的关系,进而用 Javascript 将所有此类关系的链接设置为在新标签页(窗口)中打开,这样应该更符合 HTML 规范的本意一些,当然最好的做法还是不要干预。

  上文提到,target 属性还有一个用途是控制链接在指定的 frame、iframe、窗口中打开,那么这个很容易理解,因为从 XHTML 1.0 Strict 标准开始,所有的 frameset、iframe 都被禁止使用了,而既然规范也禁止浏览器支配用户打开新窗口,那么控制链接在指定窗口中打开也就毫无用途了。

文章作者:未知  更新日期:2010-10-20
〖文章浏览:〗〖发送文章〗〖打印文章