1. 程式人生 > >HTML5+規範:Events(管理客戶端事件)

HTML5+規範:Events(管理客戶端事件)

    Events模組管理客戶端事件,包括系統事件,如擴充套件API載入完畢、程式前後臺切換等。

1、常量

1.1、"plusready": 擴充套件API載入完成事件

      document.addEventListener( "plusready", plusreadyCallback, capture );

說明:String 型別,為了保證擴充套件API的有效呼叫,所有應用頁面都會用到的重要事件。 應用頁面顯示時需要首先載入擴充套件和API程式碼庫,當擴充套件API程式碼庫載入完成時會觸發pluseready事件,當裝置觸發該事件後,使用者就可以安全的呼叫擴充套件API。 如果程式中開啟多個頁面,每個都會收到此事件。

示例:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Events Example</title>
<script type="text/javascript" >
// 擴充套件API載入完畢後呼叫onPlusReady回撥函式
document.addEventListener( "plusready", onPlusReady, false );
function onPlusReady() {
// 擴充套件API載入完畢,現在可以正常呼叫擴充套件API
// ......
}
</script>
</head>
<body >
</body>
</html>


1.2、"pause": 執行環境從前臺切換到後臺事件

          document.addEventListener( "pause", pauseCallback, capture );

說明:String 型別,當程式從前臺切換到後臺時會觸發此事件。 若應用需要處理從前臺切換到後臺的事件行為,可通過註冊事件監聽器來監聽“pause”事件,此事件需要在plusready事件後通過document進行註冊。

示例:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Events Example</title>
<script type="text/javascript" >
// 擴充套件API載入完畢後呼叫onPlusReady回撥函式
document.addEventListener( "plusready", onPlusReady, false );
function onPlusReady() {
document.addEventListener( "pause", onAppPause, false );
}
function onAppPause() {
console.log( "Application paused!" );
}
</script>
</head>
<body >
</body>
</html>


1.3、"resume": 執行環境從後臺切換到前臺事件

     document.addEventListener( "resume", resumeCallback, capture );

說明:String 型別,當程式從後臺切換到前臺時會觸發此事件。 若應用需要處理從後臺切換到前臺的事件行為,可通過註冊事件監聽器來監聽“resume”事件,此事件需要在plusready事件後通過document進行註冊。

示例:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Events Example</title>
<script type="text/javascript" >
// 擴充套件API載入完畢後呼叫onPlusReady回撥函式
document.addEventListener( "plusready", onPlusReady, false );
function onPlusReady() {
document.addEventListener( "resume", onAppReume, false );
}
function onAppReume() {
alert( "Application resumed!" );
}
</script>
</head>
<body >
</body>
</html>


1.4、"netchange": 裝置網路狀態變化事件

      document.addEventListener( "netchange", netchangeCallback, capture );

說明:String 型別,裝置網路狀態發生時會觸發此事件。 若應用需要處理網路狀態變化的事件行為,可通過註冊事件監聽器來監聽“netchange”事件,此事件需要在plusready事件後通過document進行註冊。

示例:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Events Example</title>
<script type="text/javascript" >
// 擴充套件API載入完畢後呼叫onPlusReady回撥函式
document.addEventListener( "plusready", onPlusReady, false );
function onPlusReady() {
document.addEventListener( "netchange", onNetChange, false );  
}
function onNetChange() {
var nt = plus.networkinfo.getCurrentType();
switch ( nt ) {
case plus.networkinfo.CONNECTION_ETHERNET:
case plus.networkinfo.CONNECTION_WIFI:
alert("Switch to Wifi networks!");
break;
case plus.networkinfo.CONNECTION_CELL2G:
case plus.networkinfo.CONNECTION_CELL3G:
case plus.networkinfo.CONNECTION_CELL4G:
alert("Switch to Cellular networks!");  
break;
default:
alert("Not networks!");
break;
}
}
</script>
</head>
<body >
</body>
</html>


1.5、"newintent": 新意圖事件

          document.addEventListener( "newintent", newintentCallback, capture );

說明:String 型別,程式從後臺被第三方程式呼叫並傳入新意圖事件。 此時程式將切換到前臺執行,若應用需要處理新意圖的事件行為,可通過註冊事件監聽器來監聽“newintent”事件,此事件需要在plusready事件後通過document進行註冊。

示例:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Events Example</title>
<script type="text/javascript" >
// 擴充套件API載入完畢後呼叫onPlusReady回撥函式
document.addEventListener( "plusready", onPlusReady, false );
function onPlusReady() {
document.addEventListener( "newintent", onNetIntent, false );
}
function onNetIntent() {
// 獲取新意圖傳入的引數
var args = plus.runtime.arguments;
// 處理意圖事件
}
</script>
</head>
<body >
</body>
</html>


1.6、"plusscrollbottom": 視窗滾動到底部事件

    document.addEventListener( "plusscrollbottom", eventCallback, capture );

說明:String 型別,當滾動Webview視窗到底部時觸發此事件。

示例:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Events Example</title>
<script type="text/javascript" >
// 擴充套件API載入完畢後呼叫onPlusReady回撥函式
document.addEventListener( "plusready", onPlusReady, false );
function onPlusReady() {
document.addEventListener( "plusscrollbottom", onScrollToBottom, false );
}
function onScrollToBottom() {
// 處理滾動到視窗底部事件
}
</script>
</head>
<body >
</body>
</html>


1.7、"error": 頁面載入錯誤事件

          document.addEventListener( "error", eventCallback, capture );

說明:String 型別,當Webview視窗載入頁面失敗後開啟錯誤頁面時觸發此事件。 注意:此事件僅在錯誤頁面中才觸發。

示例:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<meta name="HandheldFriendly" content="true"/>
<meta name="MobileOptimized" content="320"/>
<title>Error</title>
<script type="text/javascript">
// H5 plus事件處理
var ws=null;
function plusReady(){
// Android處理返回鍵
plus.key.addEventListener('backbutton',function(){
(history.length==1)&&ws.close();
var c=setTimeout(function(){
ws.close();
},1000);
window.onbeforeunload=function(){
clearTimeout(c);
}
history.go(-2);
},false);
ws=plus.webview.currentWebview();
}
if(window.plus){
plusReady();
}else{
document.addEventListener('plusready',plusReady,false);
}
document.addEventListener('touchstart',function(){
    return false;
},true);
// 禁止選擇
document.oncontextmenu=function(){
return false;
};
// 獲取錯誤資訊
document.addEventListener("error",function(e){
info.innerText="請求的頁面("+e.href+")無法開啟";
},false);
</script>
<style>
*{
-webkit-user-select: none;
}
html,body{
margin: 0px;
padding: 0px;
width: 100%;
height: 100%;
text-align: center;
-webkit-touch-callout:none;
-webkit-tap-highlight-color:rgba(0,0,0,0);
}
.button{
width: 50%;
font-size: 18px;
font-weight: normal;
text-decoration: none;
text-align: center;
padding: .5em 0em;
margin: .5em auto;
color: #333333;
background-color: #EEEEEE;
border: 1px solid #CCCCCC;
-webkit-border-radius: 5px;
border-radius: 5px;
}
.button:active{
background-color: #CCCCCC;
}
</style>
</head>
<body>
<div style="width:100%;height:20%;"></div>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 512 512" style="height:20%;">
<g id="icomoon-ignore">
<line stroke-width="1" x1="" y1="" x2="" y2="" stroke="#449FDB" opacity=""></line>
</g>
<path d="M256 0c-141.385 0-256 114.615-256 256s114.615 256 256 256 256-114.615 256-256-114.615-256-256-256zM352 128c17.673 0 32 14.327 32 32s-14.327 32-32 32-32-14.327-32-32 14.327-32 32-32zM160 128c17.673 0 32 14.327 32 32s-14.327 32-32 32-32-14.327-32-32 14.327-32 32-32zM352.049 390.37c-19.587-32.574-55.272-54.37-96.049-54.37s-76.462 21.796-96.049 54.37l-41.164-24.698c27.98-46.535 78.958-77.672 137.213-77.672s109.232 31.137 137.213 77.672l-41.164 24.698z" fill="#666666"></path>
    </svg>
<p style="font-size:18px;font-weight:bolder;">We're sorry ...</p>
<p id="info" style="font-size:12px;"></p>
<!--<div class="button" onclick="history.back()">Retry</div>-->
<div class="button" onclick="if(history.length == 1){ws.close();}else{ws.back();ws.back();}">Back</div>
<div class="button" onclick="ws.close()">Close</div>
</body>
</html>


2、方法

2.1、addEventListener: 新增事件監聽函式

void document.addEventListener( event, callback, capture );

說明:通過Html中標準document物件的addEventListener方法新增擴充套件事件監聽器,當指定事件發生時,將觸發對應額監聽回撥函式。

引數:

event: ( DOMString ) 必選 要新增監聽的事件型別,可取上面列出的所有事件常量

callback: ( EventTrigCallback ) 必選 擴充套件API載入完畢觸發的回撥函式

capture: ( Boolean ) 可選 事件流捕獲順序,可忽略

返回值:void : 無

3、回撥方法

3.1、EventTrigCallback: 事件觸發回撥函式

void onTrig() {

// Event trig code

}

說明:指定事件觸發時的回撥函式,在指定的事件已經發生時呼叫。

返回值:void : 無

3.2、ErrorEventTrigCallback: 頁面載入錯誤事件回撥函式

void onErrorTrig( Event event ) {

// Event trig code

var url = event.url;  // 載入錯誤的頁面路徑,API中傳入的url值

var href = event.href;  // 載入錯誤的頁面完整路徑,通常以“file://”開頭的路徑

}

說明:當Webview視窗載入頁面失敗後開啟錯誤頁面時觸發此事件。

引數:

event: ( Event ) 可選 載入頁面失敗資訊,可通過event.url(String型別)獲取載入頁面的url值,如“./test/html”; 可通過event.href(String型別)載入錯誤的頁面完整路徑,包括完整的協議頭,如Android平臺“file:///storage/sdcard0/Android/data/io.dcloud.HBuilder/.HBuilder/apps/HBuilder/www/test.html”,iOS平臺“file:///var/mobile/Containers/Data/Application/757966CF-345C-4348-B07F-EEF83CF9A369/Library/Pandora/apps/HBuilder/www/test.html”。

返回值:void : 無