关于书

  “不知道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. CPU acceleration status: HAXM is not installed on this machine解决方法

    报错信息: Starting emulator for AVD 'old_android' emulator: WARNING: Classic qemu does not support SMP. ...

  2. 【leetcode】Roman to Integer

    题目描述: Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range fr ...

  3. 号称21世纪的编辑器Atom

    上个月无意中在一篇软文中看到一篇前端排行榜,其中有一项排行就是编辑器,而排在前三的编辑器分别是sublime.Atom.webstorm.出于好奇,简单的在网上查看了介绍,原来全球最大开源分享网站gi ...

  4. Nginx %00空字节执行php漏洞

    Nginx如下版本:0.5.*, 0.6.*, 0.7 <= 0.7.65, 0.8 <= 0.8.37在使用PHP-FastCGI执行php的时候,URL里面在遇到%00空字节时与Fas ...

  5. 【刷题记录】GCJ 2.71~2.72

    GCJ 271 [题目大意] Minimum Scalar Product 有两个东西(滑稽)v1=(x1,x2,x3,……,xn)和v2=(y1,y2,……yn),允许任意交换v1和v2中各数字的顺 ...

  6. 螺旋方阵(4x4)(java实现)

    代码如下: public class N { public static void main(String[] args) { final int N=4; int a[][]=new int[N][ ...

  7. 深入理解JavaScript运行机制

    深入理解JavaScript运行机制 前言 本文是写作在给团队新人培训之际,所以其实本文的受众是对JavaScript的运行机制不了解或了解起来有困难的小伙伴.也就是说,其实真正的原理和本文阐述的并不 ...

  8. jQuery插件开发(溢出滚动)

    声明:此程序仅针对手机端,简单的封装一个插件,意在记载插件的开发过程,如有错误及不足之处,还望即时指出. 移动开发的时候,我们经常会遇到滑动事件,众所周知手机端滑动主要依靠touch事件.最近接连遇到 ...

  9. 第二章 Matlab面向对象编程基础

    DeepLab是一款基于Matlab面向对象编程的深度学习工具箱,所以了解Matlab面向对象编程的特点是必要的.笔者在做Matlab面向对象编程的时候发现无论是互联网上还是书店里卖的各式Matlab ...

  10. [IOS]Swift 遍历预制的本地资源文件

    我事先放了一堆svg文件,但是我是批量使用的,想要直接遍历他们加入到一个list中来,那我直接就遍历他们的名称,把他们的名字组成一个array. var ss:NSString = NSBundle. ...