第17章 事件处理
1、通过HTML属性注册的事件处理程序被转换为能存取全局变量的顶级函数而非任何变量。因此在使用的时候必须显式地写window.open()而不是open()。
2、通过HTML属性注册的事件处理程序的返回值为布尔类型,用于告诉浏览器要不要执行这个事件相关的默认操作。
3、事件处理调用顺序:通过对象属性或HTML属性注册的处理程序 > 使用addEventListener()注册的处理程序 > 使用attachEvent()注册的处理程序
4、发生在文档元素上的大部分事件都会冒泡,值得注意的例外是focus、blur和scroll事件
5、事件捕获只能用于以addEventListener()注册且第三个参数为true的事件处理程序。常用于处理鼠标拖放,因为处理拖放事件的位置不能是这个元素内部的子元素。
6、除了mouseenter和mouseleave外的所有鼠标事件都能冒泡.
7、当web应用从缓存中载入的时候,所有与之相关的文件也是直接从缓存中获取。在线状态下。浏览器会异步地检查清单文件是否更新,而不是检查缓存的文件是否更新。因此,最简单的方式就是更新版本号。
8、注意,浏览器检查清单文件以及更新缓存的操作是异步的,可能在从缓存中载入应用之前,也有可能同时进行。因此,对于简单的web应用而言,在更新清单文件之后,用户必须载入两次才能保证最新版本生效。第一次从缓存中载入老版本随即更新缓存。第二次从缓存中载入最新的版本。
第21章 多媒体和图形编程
1、为了强制让图片缓存起来,首先利用Image()构造函数来创建一个屏幕外图片对象,之后将该对象的src属性设置成期望的URL。由于图片元素没添加到文档中因此不可见。但浏览器已经将它缓存起来了。这样当屏幕内的图片设置相同的src时,可以从缓存中加载。
第22章 HTML5 api
1、客户端JavaScript单线程的原因:客户端JavaScript必须不能运行太长事件,否则会导致循环事件,web浏览器无法对用户的输入做出响应。同理Ajax的api都是异步。
2、在web workers标准中,定义了解决客户端JavaScript无法多线程的问题。但它处在一个自包含的执行环境中,无法访问window对象和document对象,和主线程之间的通信也只能通过异步消息传递机制实现。一个复杂的web应用一般包括几十个worker。