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不支持它們