关于书

  “不知道ppk的网站QuirksMode,说明你可能还没有真正成为资深的JavaScript程序员。”

——Roger Johansson,瑞典资深Web专家。

  ppk是世界级前端技术专家,Web标准的布道者,在《ppk on JavaScript》中,他向读者介绍了JavaScript这门流行语言。

  这本书从第五章开始依次介绍了JavaScript Core,BOM,DOM,和Ajax。整本书通读下来后,发现ppk重点关注原生API在各浏览器下的兼容性,但是限于篇幅,《JavaScript高级程序设计》这本书可能做的更加出色。然而与其它书籍不同的是,网站的可访问性被ppk作为重要论点写在了这本书中,这也是它另人印象深刻的原因所在。

重要论点:网站的可访问性

  可访问性是指你的网页对任何人、在任何环境下都是可以可持续访问的。特别是某些用户,他们被迫忍受着一些无法改变的状况,如弱视、浏览器不能(或不充分)支持JavaScript等。

  ppk在书的开端点题,强调网页的可访问性,在结尾甚至一度作出“Ajax炒作必将终结,JavaScript用途将被重新定义”的预言。 可谓是首尾呼应,论点突出啊!

  ppk在书中举了一些例子向我们介绍可访问性:

  1.链接必须有href(p33)。

<a href="#" onclick="showPopup('niceimage.jpg')">Nice Image!</a>

  当一个无脚本用户点击这个链接时,什么也不会发生,因此这个页面不具备可访问性。相反,

<a href="niceimage.jpg" id="nice">Nice Image!</a>
document.getElementById('nice').onclick=function(){
showPopup(this.href);
}

  这样的编写形式不仅进行了行为与结构的分离,还保持了页面的可访问性。

  类似的,当一个超链接并非链接到一个资源,而是为了触发脚本时,很多人会这样写:

<a href="javascript:void(0)" onclick="doSomething();">Do Something</a>

<a href="javascript:doSomething()">Do Something</a>

  当一个禁用了脚本的用户点击这个链接时,什么事也不会发生。这个时候ppk建议我们使用DOM生成这种超链接,假如用户禁用了脚本,那么他根本不会看到这些链接,也不会带来"为什么我点击了却没反应"这种困惑了。

  总之,对超链接的href来说,要不就让它包含一个URL地址以便那些禁用脚本的用户可以继续访问,要不就由JavaScript来生成这个链接。

  2.用JavaScript隐藏内容(p34)

  以表单提交为例,借助选择性呈现的表单元素,可以提高页面的易用性。根据用户的前一个选择,来决定接下来呈现的表单元素,而不是将所有的元素一股脑地呈现出来。我们的一般思路是将这些选择性呈现的元素用CSS隐藏,然后用脚本监听用户行为,符合操作条件后改变样式,将隐藏元素显示出来。不难想象,一个禁用了脚本的用户将永远无法看到这些隐藏的表单元素。

  ppk建议使用JavaScript隐藏这些选择性呈现的元素,而非CSS。这样当脚本被禁用时,它们就不会隐藏,可访问性被完整地保持下来。

  3.可点击的元素(p36)

  依赖键盘的Tab操作,可以使页面元素切换焦点。浏览器默认的可获得键盘焦点的元素只有链接、表单域和按钮。以下拉菜单为例,它使用mouseover事件来触发下拉菜单,为了保持键盘用户的可访问性,还需要为其添加一个focus事件监听,然后,为了触发focus事件,键盘用户必须可以把焦点落到下拉菜单上。如果做不到这点,那么脚本仍然是不可访问的。ppk建议任何键盘友好的事件或脚本都应该被设置在链接、表单和按钮上。

  注:tabindex用来控制用户使用tab键导航时的顺序,使tabindex等于负值,例如tabindex="-1",可以使div等不能获焦的元素监听和触发onfous事件,但无法使用Tab键获取键盘焦点。使tabindex等于正值,div既可触发onfocus,也可使用tab键导航。

  “JavaScript的目标都围绕着酷炫的技术,而不是可用性”,这是在JavaScript历史中反复出现的情况。DHTML带来铺天盖地的弹窗广告、闪烁而不友好的动画,一度使JavaScript声名狼藉。如今Ajax的盛行再次掀起了人们对技术的追捧,人们往往围绕着如何实现Ajax,如何使用Ajax做一些酷炫的事情,而很少有人关注可用性和交互问题,即为什么要用Ajax?ppk相信,Ajax最终会像DHTML那样终结:人们会完全对它失去兴趣,而它将会原形毕露,只是少量的JavaScript和大量的空话。他希望JavaScript开发者们可以学到很酷的代码、花哨的库或框架背后的东西——使它们的行为都基于脚本运行环境。

我的看法

  《ppk on JavaScript》这本书写于2006年,那是个Ajax浪潮大爆发的年代,对待一个充满诱惑力的技术,ppk仍然能够不失理智地去剖析其中可能存在的问题,他的钻研和质疑精神无疑是QuirksMode成功的重要原因。"JavaScript用来做什么?“已经没有人去回答了,前端帝国日渐壮大,服务器变为一个“数据源”,JSON和Node.js的诞生加剧了这种变化。前端可以实现的功能越来越多,它的作用作用越来越大,代码量也越来越大,如果不进行模块化,势必会加剧码农编程的痛苦, 于是各种MVC,MVVM框架,各种模块化规范开始盛行。

  我们是否如ppk所说,忽略了网页的可用性?天猫,一个电子商务网站,离开了JavaScript,将无法完成任何一笔订单。一些依赖JS库组装的网站甚至连页面结构都呈现不出来。

  但是,没办法。图片过多,结构过于复杂,DOM树过于庞大,一次加载完用户体验过于的差。当人们发现JavaScript和Ajax可以解决这些矛盾时,自然会拼命抓住这棵救命稻草。至于未来庞大的前端帝国是否会坍塌,JavaScript的用途是否会被重新定义,没人可以预料。然而,并不是说ppk的说法是错的,DOM和Ajax的的确确滥用充斥在互联网中,类似天猫,百度地图这种互联网应用理所当然可以依赖它们,但是像新闻类、门户类、公司主页等网站都盲目跟风,依赖于Ajax来呈现内容,这无疑应该引起深刻思考。

  不管怎么说,如今只会验证个表单,写个DOM操作的程序员已经满足不了时代的需求了,当全世界都在喝咖啡时,你还在考虑为什么大家都喝咖啡,而不是喝可乐,无疑有点可笑了,不过这个碎碎念留在饭后还是不错,万一真理真的掌握在少数人手中呢?比如,ppk。

  最后,附上书的照片一张。

  (完)

前端er是否忽略了某些东西?——读《ppk谈JavaScript》的更多相关文章

  1. [已读]ppk谈javascript

    读的第一本javascript方面的书籍,印象也比较深.ppk对浏览器兼容很有研究~~可以看看他的www.quirksmode.org

  2. 作为前端er,写在年末的一些话

    写惯了技术类的文章,这种总结和唠嗑型的我基本也就在年末才来一篇.说实话,这种轻松类的文章往往比技术类的要受欢迎的多,因为其受众更广,看起来也不烧脑. 说来愧疚,这一年其实产出有点低,大致就写了不到二十 ...

  3. 前端er必须知道的Git地址及常用工具地址

    商城篇(找工作必练) 开源商城 推荐指数:5星,掌握了它,可以说,今后工作中的各种需求都不是问题,工作1~2年的也可以学习其中的思路(建议收藏). 这是一个集小程序/公众号/app为一体的商城系统,包 ...

  4. 感觉自己应该重新读一次Javascript

    我自己也有一本Javascript书籍,是自己上大学的时候学校给提供的,现在,我依旧带着这本书.我决定要把这本书在重新温习一下.然后,开启下面的Javascript之旅.这是我看到博客园一位园友写的, ...

  5. 前端周报:前端面试题及答案总结;JavaScript参数传递的深入理解

    1.2017前端面试题及答案总结 |掘金技术征文 "金三银四,金九银十",用来形容求职最好的几个月.但是随着行业的饱和,初中级前端er就业形势不容乐观. 行业状态不可控,我们能做的 ...

  6. 前端学习之路-CSS介绍,Html介绍,JavaScript介绍

    CSS介绍 学前端必备掌握CSS样式,css为层叠样式表,用来定义页面的显示效果,加强用户的体验乐趣,那么如何用css到html中呢? style属性方式 利用标签中的style属性来改变显示样式 & ...

  7. 16年毕业的前端er在杭州求职ing

    来杭州也有一两个星期了,这个周末下雨,是在没地去,还是习惯性的打开电脑逛技术论坛,想想也是好久没有更新博文了... 背景 因为曾经看过一篇文章面试分享:一年经验初探阿里巴巴前端社招所以来杭州也是带有目 ...

  8. 写给小前端er的nodejs,mongodb后端小攻略~ (windows系统~)

    一.写在前面 迫于学校的压力,研二上准备回学校做实验发论文了,感觉真的没意思,这几天学着搞搞后端,踩了很多坑,整理一下这几天的坑以免以后再犯! 二.本文主要内容(由于是面向前端同学的,所以前端的内容就 ...

  9. 项目需求会__前端er定位的思考~

    一.页面展示-----针对前端部分:后台的东西(功能.样式)不考虑! 二.动态效果------能不能实现! 三.接口数据------怎么传数据! 四.兼容性--------兼容到哪个版本浏览器! 五. ...

随机推荐

  1. [转]DDD领域驱动设计基本理论知识总结

    领域驱动设计之领域模型 加一个导航,关于如何设计聚合的详细思考,见这篇文章. 2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity i ...

  2. linux下libuv库安装教程

    下载并编译libuv libuv需要自己手动下载源码,并手动编译. 当前目录为:/home/xlz/test/github,在后面,会用$PATH来代替,我的系统的Debian8,64bit. $gi ...

  3. js整理5

    proto 每个对象具有的属性,指向构造该对象的构造函数的原型对象 prototype 函数的特有属性,指向原型对象:原型对象可以是对象,数组,函数等类型: constructor 原型对象和实例,都 ...

  4. POJ 2774 Long Long Message ——后缀数组

    [题目分析] 用height数组RMQ的性质去求最长的公共子串. 要求sa[i]和sa[i-1]必须在两个串中,然后取height的MAX. 利用中间的字符来连接两个字符串的思想很巧妙,记得最后还需要 ...

  5. OSG消息机制之消息分析

    OSG消息接收在头文件有各种事件的相关参数

  6. PHP CI框架 result()详解

    该方法执行成功返回一个对象数组,失败则返回一个空数组. 一般情况下,我们使用下面的方法遍历结果,代码就像这样: $query = $this->db->query("要执行的 S ...

  7. 用Fiddler的自动响应模拟系统集成

    1. 下载最新版本的Fiddler Fiddler 官网 2, 安装并启动Fiddler 3, 勾选自动响应 见上图 4, 添加自动响应规则 见上图 5, 添加自动响应内容文件 添加响应文件到Fidd ...

  8. 使用mongodump将mongodb数据备份带JOSN文件

    备份: 首先,mongodb要连接到指定数据库 在指定数据库目录下,shift+右键--在此次打开命令行--输入以下命令: mongodump -d databaseName -o backup 备份 ...

  9. 【BZOJ3940】【BZOJ3942】[Usaco2015 Feb]Censoring AC自动机/KMP/hash+栈

    [BZOJ3942][Usaco2015 Feb]Censoring Description Farmer John has purchased a subscription to Good Hoov ...

  10. C语言与java 20155317 王新玮第二次

    20155317 王新玮第二次写作感想   你有什么技能比大多数人(超过90%以上)更好? 刚刚看到这个题目,我的首先想到的是会一些中医,懂得中医的理论框架知识,懂得大部分的中医脉象,能够解决日常生活 ...