HTML5事件浏览器
contextmenu事件缓存
contextmenu事件是冒泡的,能够将事件处理程序指定到document,这个事件的目标是用户操做的元素,在兼容DOM的浏览器中使用event.preventDefalut()取消默认行为,在IE中将event.returnValue的值设置为false取消默认行为ide
contextmenu事件属于鼠标事件,其事件对象中包含与光标位置有关的全部属性函数
beforeunload事件对象
这个事件在页面卸载以前触发,让开发人员在页面卸载前阻止这一操做,弹出一个提示框,告知用户页面将被卸载,询问用户是否要关闭页面事件
为了显示弹出的对话框,必须将event.returnValue的值设置为要显示给用户的字符串(IE和Firefox),同时做为函数的值返回(Safari和Chrome)ip
EventUtil.addHandler(window,"beforeunload",function(event){内存
event=EventUtil.getEvent(event);资源
var message="I'm really going to miss you if you go.";开发
event.returnValue=message;
return message;
});
Opera11及以前版本不支持beforeunload事件
DOMContentLoaded事件
window的load事件会在页面中的一切都加载完毕时触发,DOMContentLoaded事件则是在造成完整的DOM树以后触发(不理会图像、Javascript文件、CSS文件或其余资源)
EventUtil.addHandler(document,"DOMContentLoaded",function(event){
alert("Content loaded");
});
DOMContentLoaded事件早于load事件触发
readystatechange事件
IE为某些DOM文档部分提供了readystatechange事件,支持这个事件的每一个对象都有一个readyState属性,包含5个值的其中一个
uninitialized(未初始化):对象存在但未初始化
loading(正在加载):对象正在加载数据
loaded(加载完毕):对象加载数据完成
interactive(交互):能够操做对象,但尚未彻底加载
complete(加载完毕):完成
并不是全部对象都会经历readyState这几个阶段,readyState属性不老是连续的
interactive状态与load事件的前后顺序不可肯定,而且interactive状态与完成阶段的顺序也不必定肯定,在检测时须要同时检测交互和完成阶段
if(document.readyState=="interactive"||document.readyState=="complete"){
...
}
支持readystatechange事件的浏览器有IE、Firefox4+、Opera
另外<script>(IE和Opera)<link>(仅IE中)也会触发readystatechange事件,一样会面临状态属性顺序不同的这个问题
if(target.readyState=="loaded"||target.readyState=="complete"){
EventUtil.removeHandler(target,"readystatechange",argument.callee);
alert("Script Loaded");
}
以后移除事件,防止触发2次
pageshow和pagehide事件
Firefox和Opera有一个“往返缓存”,缓存里保存着页面的数据,用户在使用浏览器的“前进”和“后退”时能加快转换速度,在bfcache中读取的数据不会触发load事件
在从新加载的页面中,pageshow会在load事件触发后触发;面对bfcache中的页面,pageshow会在页面彻底恢复的那一刻触发。虽然这个事件的目标是document,但必须将事件处理程序添加到window
除了一般的属性,pageshow事件的event对象还包含一个名为persisted的布尔值,若是页面保存在bfcache中,这个值为ture,不然为false
pagehide事件则是在浏览器卸载页面时触发,并且在unload事件前触发,与pageshow事件同样,其在document上面触发,但事件处理程序要添加到window对象上
pagehide事件也有一个persisted属性,若是页面卸载后保存在内存中,值为true,不然false
支持pageshow和pagehide事件的浏览器有Firefox、Safari5+、Chrome和Opera,IE不支持它们