从今天起我将陆续将 ppk on JavaScript 的读书心得发布到这个blog上ppk是我所景仰的一位web开发者原因无它只是因为作为一个JavaScript的开发者来说他涉及的领域包括web标准可用性无障碍等正是其他开发者所不关注或者故意忽略的并且他写了很多案例测试不同的浏览器总结出JavaScript的接口(API)兼容性成为JavaScript开发者重要参考资料几年如一日这种钻研精神是很多人所缺乏的
ppk在今年月出版了他的书我从去年起就在等的书今天拿到手迫不及待地把第一章阅读完毕果然让人充满惊喜他的功力非同一般虽然只是一个初学者但我认为我已经走在正确的学习道路上我想我若能将学习心得分享能让正在学习的人看到可以一起交流一起进步尽管我不敢确保你能从我这里得到什么启发但我可以确信我这些笔记会比你拷贝粘贴代码的学习方式更正确
这本书有十章章名都简洁明了分别是目的背景浏览器准备核心BOM 事件DOM CSS更改和数据获取从来没有一本书能如此简洁地明确JavaScript的方方面面因此学习不会有太大负担前言不宜过多下面就开始我的第一章学习笔记
开篇宗义JavaScript的目的是为网页增加特别的一层可用性听起来很简单但这条黄金定律经常被人误解就算编写有用的JavaScript 开发者可能还是没能结合适当的情景Web标准运动发展下与当代无障碍的HTML页面的配合更为不妙的是有些开发者不是为网页增加一层可用性而是用整层取代之后果是如果浏览器不支持JavaScript 网站就完了
概念概述
JavaScript是一门由浏览器解释的脚本语言它通过在客户端而不是服务器端处理某些交互比如表单验证创建新菜单来给网站增添可用性传统的网页交互是客户端的一举一动都必须经过服务器端的出来才能反馈回来漫长的等待会让用户崩溃而JavaScript可以在客户端代替服务器端做某些事情(最明显的表单验证)从而提高用户体验
随着时代的发展JavaScript能够处理越来越多的交互问题出现了JavaScript能做这么多事情到底要多用还是少用?这就有了富与瘦的对决是整个页面都用JavaScript来控制交互还是只增加些许的JavaScript来增强可用性?就是说尽可能地使用JavaScript还是有所节制甚至不用?
瘦客户端很大程度上依赖于客户端-服务器的通讯而富客户端尽可能限制额外的数据通讯
哪种方式更好?尽管富客户端带来一些可用性益处但瘦客户端可能是更标准的JavaScript用法Web被认为是文档集合而不是界面集合最明显的证据是浏览器有后退前进的功能让你在文档中跳转而界面会有么?浏览器可以收藏(书签)文档而界面可以么?从无障碍来说瘦客户端也更少出错
这种非平衡性是很难解决的富客户端当然也可以在更高级的界面做到前进后退或者收藏也可以做到完美的无障碍这必须需要大量的额外工作但不是每个项目都有超出预算的时间或金钱此外太过专注于可用性而忽略无障碍也是一个问题
那么JavaScript的目的是为富客户端还是瘦客户端服务?答案是看情况得看你的网站你的受众你的JavaScript水平
技术概述
JavaScript分为六个方面分别是核心(Core)浏览器对象模型(BOM)事件(Events)文档对象模型(DOM)CSS变更和数据获取(XMLHttpRequest)
上古时代NetScape领头之时NetScape是事实标准
当代却没有这么简单ECMA标准化JavaScript Core WC标准化DOM而BOM尚在WHATWG的标准化中WC也刚有了XMLHttpRequest的第一份草稿今天BOM依然遵循NetScape的事实标准而XMLHttpRequest还是遵照Microsoft的原始规范
JavaScript的目的在于为网站增加可用性而不是破坏用户的隐私和安全因此JavaScript不允许读写用户的文件(cookies除外)采取同源策略只允许来自相同域的交互不允许读取历史记录不能为上传文件的表单设置值由JavaScript控制的窗口关闭需经用户确认由JavaScript打开的窗口不能小于×的窗口不能移出屏幕之外
JavaScript的历史
探寻历史才能让我们知道JavaScript为什么会被误解得如此深JavaScript的创造者是Brendan Eich首次在NetScape 中实现它的目的是创建一门足够简单的语言让开发者能容易地为网页增加交互只要把代码拷贝过来调整一下就可以这确实令人赞歎很多JavaScript开发者是从拷贝粘贴开始的
不幸的是JavaScript生错了名字也生错了语法最初它叫LiveScript但年的时候Java炙手可热NetScape想搭顺风车于是某产品经理(我想知道她/他是谁呵呵)命令更名命令Brendan Eich让Javascript像Java这让很多人误认为JavaScript是Java的低级版不能引起严肃程序员的关注
年之时NetScape 是王Microsoft只能照抄这是一个难得的和谐期当然那时候浏览器比起现在来瘦了仅限于表单验证鼠标轮换的一些小花招而已
接下来就是影响深远的浏览器大战了为了争夺市场两家浏览器纷纷实现不同的东西谁都想成为事实标准最有名的就是NetScape 的documentlayer和IE 的documentall(忘记它们吧!)它们让DHTML流行起来
年Microsoft以推出良好支持CSS和DOM的IE胜出NetScape的让位终于有足够的时间让一场革命发生那就是CSSWaSP首先从CSS入手而很多专家也发现/发明了许多浏览器的补救办法让这场革命成为可能
年一些先锋们在CSS革命的影响下开始探索新的JavaScript风格更多地关注无障碍改观人们对它的坏名声那就是unobstrusive——把JavaScript从HTML结构层分离出来遗憾的是那些在浏览器大战存活下来的程序员可能还没有发现这条新道路
年Ajax热潮为JavaScript社区注入新的血液但某些方面Ajax太像DHTML了无障碍是很多Ajax应用的难言之隐这个热潮趋向于关注技术(如何Ajax)而可用性和交互(为何Ajax)却被低估最后各种肿胀的库(现在称为框架)迅速发展起来
Ajax依然全速前进但这会像DHTML一样结果人们渐渐失去兴趣它们会土崩瓦解
JavaScript兴衰史好像有一定的定律支配我们能打破这个怪圈吗?不管如何JavaScript开发者在寻找各种酷代码和华而不实的框架之外更应该调整自己的行动让JavaScript运行在标准兼容的无障碍的网页中