事件
Cordova給我們提供了很多的事件,可以在應用程序中使用。應用程序代碼中可以添加這些事件的監聽。例如:
HTML文件
Device Ready ExampleJS文件
// example.js文件
// 等待設備API庫加載好
//
function onLoad() {
document.addEventListener("deviceready", onDeviceReady, false);
}
// 設備API可以使用了
//
function onDeviceReady() {
document.addEventListener("pause", onPause, false);
document.addEventListener("resume", onResume, false);
document.addEventListener("menubutton", onMenuKeyDown, false);
//給其他事件添加類似的監聽
}
function onPause() {
//處理暫停事件
}
function onResume() {
//處理恢復事件
}
function onMenuKeyDown() {
//處理"菜單"按鈕事件
}
// 給其他事件添加類似的事件處理
注意: 應用程序通常一旦deviceready觸發就應該用document.addEventListener綁定事件監聽。
下面的表格列除了cordova的事件和支持的平臺:
deviceready
當Cordova完全加載好deviceready事件會觸發。這個事件對每一個應用程序都是必須的。他是Cordova設備API準備好并可以訪問的信號。
Cordova由兩個代碼庫組成:原生(native)和JavaScript。一旦原生的代碼加載好,自定義的加載圖片就可以顯示了。然而,JavaScript代碼只在DOM加載后加載。這意味這webapp可能在對應的原生代碼變得可用之前執行JavaScript方法。
一旦Cordova全部加載deviceready事件就會觸發。一定事件出發,你可以安全的進行CordovaAPI的調用。應用程序通常一旦HTML document DOM加載完成,就會使用 document.addEventListener綁定一個事件監聽。
deviceready事件和其他事件有點不同。其他事件的事件處理函數注冊都是在deviceready事件出發的回調函數中立馬執行。
簡單的例子
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
// 現在可以安全的使用設備API
}
pause
當原生平臺把應用程序放入后臺這個pause事件會觸發,通常是用戶切換到了不同的應用程序。
簡單的例子
document.addEventListener("pause", onPause, false);
function onPause() {
// 處理pause事件
}
iOS的古怪行為
在pause處理函數中,任何的CordovaAPI調用或者通過Objective-C完成的原生插件他們是不工作的,和任何的交互調用,如alert和console.log()是一樣的。只有在下一個運行時鐘中,app被喚醒才會處理。
iOS的特定resign事件可作為pause的替代品,并可以檢測用戶啟動 Lock按鈕鎖定設備和app在前臺運行。如果app(和設備)支持多任務,這個事件了一系列pause事件是配對出現的,但是僅在iOS5。事實上,在支持多任務的iOS5中,所有被鎖的應用程序都被推送到了后臺。對于應用程序來說擋在iOS中被鎖任然在運行的,讓多任務不可用可以設置UIApplicationExitsOnSuspend為YES。在iOS鎖定時運行,這個設置無效。
resume
當原生平臺將應用程序從后臺運行拉出resume事件就會觸發。
簡單的例子
document.addEventListener("resume", onResume, false);
function onResume() {
// 處理resume事件
}
iOS的古怪行為
任何在pause事件處理函數中調用的交互方法都會在app恢復的時候執行,以resume事件作為信號。包括alerts、console.log()和其他任何來自插件和CordovaAPId的調用,他們是通過Object-C完成的。
active 事件
iOS的特定active事件可作為resume的替代品,并可以檢測用戶關閉 Lock按鈕解鎖設備和app在前臺運行。如果app(和設備)支持多任務,這個事件了一系列resume事件是配對出現的,但是僅在iOS5。事實上,在支持多任務的iOS5中,所有被鎖的應用程序都被推送到了后臺。對于應用程序來說擋在iOS中被鎖任然在運行的,讓多任務不可用可以設置UIApplicationExitsOnSuspend為YES。在iOS鎖定時運行,這個設置無效。
resume 事件
當從resume事件回掉中調用交互方法,比如:alert()需要用setTimeout()時間為0包裹調用,或者其他app掛起。例子:
document.addEventListener("resume", onResume, false);
function onResume() {
setTimeout(function() {
// TODO: do your thing!
}, 0);
}
Android的古怪行為
參考Android生命周期指南來獲取關于resume事件在Android中古怪行為的詳細信息。
backbutton(按下返回按鈕)
當用戶按下返回按鈕事件觸發,如果你需要重寫默寫行為你可以注冊backbutton事件監聽。不在需要其他調用方法來重寫返回按鈕的行為。
簡單的例子
document.addEventListener("backbutton", onBackKeyDown, false);
function onBackKeyDown() {
// 返回按鈕事件的事件處理函數
}
menubutton(按下菜單按鈕)
當用戶按下菜單按鈕事件觸發,如果你需要重寫默寫行為你可以注冊menubutton事件監聽。
簡單的例子
document.addEventListener("menubutton", onMenuKeyDown, false);
function onMenuKeyDown() {
// 菜單按鈕事件的事件處理函數
}
searchbutton(按下搜索按鈕)
Android中當用戶按下搜索按鈕事件觸發,如果你需要重寫默寫行為你可以注冊'searchbutton'事件監聽。
簡單的例子
document.addEventListener("searchbutton", onSearchKeyDown, false);
function onSearchKeyDown() {
// 搜索按鈕事件的事件處理函數
}
startcallbutton(按下通話按鈕)
當用戶按下通話按鈕事件觸發,如果你需要重寫默寫行為你可以注冊startcallbutton 事件監聽。
簡單的例子
document.addEventListener("startcallbutton", onStartCallKeyDown, false);
function onStartCallKeyDown() {
// 通話按鈕事件的事件處理函數
}
endcallbutton(按下掛斷通話按鈕)
當用戶按下掛斷通話按鈕事件觸發,如果你需要重寫默寫行為你可以注冊endcallbutton事件監聽。
簡單的例子
document.addEventListener("endcallbutton", onEndCallKeyDown, false);
function onEndCallKeyDown() {
// 掛斷通話按鈕事件的事件處理函數
}
volumedownbutton(按下降低聲音按鈕)
當用戶按下降低聲音按鈕事件觸發,如果你需要重寫默寫行為你可以注冊volumedownbutton事件監聽。
簡單的例子
document.addEventListener("volumedownbutton", onVolumeDownKeyDown, false);
function onVolumeDownKeyDown() {
// 降低聲音按鈕事件的事件處理函數
}
volumeupbutton(按下增加聲音按鈕)
當用戶按下增加聲音按鈕事件觸發,如果你需要重寫默寫行為你可以注冊volumeupbutton事件監聽。
簡單的例子
document.addEventListener("volumeupbutton", onVolumeUpKeyDown, false);
function onVolumeUpKeyDown() {
// 增加聲音按鈕事件的事件處理函數
}