初次使用webview,有很多地方不懂的,在此做下記錄,留待以后學習!
以前沒有接觸過APP開發,對webview一直懵懵懂懂,也不敢使用。這次逼不得已必須要去使用就認真的學習了下,發現也並不是很難理解。
在Html5plus的官方文檔中關於webview的方法並不多,共有如下幾個
all 獲取所有webview窗口
close 關閉webview窗口
create 創建新的webview窗口
currentWebview 獲取當前窗口的webviewObject對象(這個對象很重要!!)
getWebviewById 查找指定表示的webviewObject窗口
hide 隱藏webview窗口
open 創建並打開webview窗口
show 顯示webview窗口
關於方法的介紹在此不做贅述,文檔中寫的比較清楚,主要通過本人的兩個小測試程序來講解,代碼如下
此為index.html 是應用進入的第一個頁面
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>Webview Example</title> 6 <script src='js/jQuery.js'></script> 7 <script type="text/javascript"> 8 // H5 plus事件處理 9 document.addEventListener("plusready",function (){ 10 $('#create').click(function (){ 11 setTimeout(function (){ 12 alert('開始創建'); 13 var newWsObj = plus.webview.create('test.html','test',{},{myVar:'我的值'}); 14 newWsObj.show(); 15 }, 1000); 16 }); 17 18 $('#show').click(function (){ 19 // 顯示test窗口 20 alert('現在顯示test窗口,當index窗口第二次出現時test窗口是已經創建了並隱藏起來的'); 21 // 顯示並不是刷新 test窗口上的plusready事件中的代碼是不會執行的 22 plus.webview.show('test'); 23 }) 24 }); 25 26 </script> 27 </head> 28 <body> 29 <button id='create'>創建一個新的webview並顯示</button> 30 <button id='show'>顯示test</button> 31 </body> 32 </html>
此為test.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script type="text/javascript" src="js/jQuery.js" ></script> <script type="text/javascript"> // H5 plus事件處理 document.addEventListener("plusready",function (){ // 獲得應用首頁的窗口對象 var ws = plus.webview.getLaunchWebview(); alert('應用首頁webview:'+ws.getURL()); // 獲得當前創建對象 var cur = plus.webview.currentWebview(); alert('當前窗口對象:'+cur.getURL()); alert('當前窗口對象的值:'+cur.myVar); // 輸出當前所有的窗口對象 var wsObjArr = plus.webview.all(); for (var i in wsObjArr) { alert(i+':'+wsObjArr[i].getURL()); } // 隱藏當前webview對象 alert('1秒后隱藏該webview'); setTimeout(function(){ plus.webview.hide(cur); },1000); }); </script> </head> <body> 我是新的webview </body> </html>
當進入應用時,如果點擊“顯示test”是不會有效果的,因為我們還沒有創建test窗口,我們需要利用create()方法創建並用show()方法顯示出來。open()方法類似於同時執行create()和show()。我們在創建test窗口時傳遞了一個額外的參數"myVar",通過這種方式以后可以很容易的在窗口之間傳遞參數而不需要通過get方式來傳遞。
創建並顯示test窗口后會依次alert出首頁的窗口url(感覺首頁的窗口與通過plus.webview.getWebviewById( plus.runtime.appid )獲得的應用入口窗口應該是指的同一個窗口,至少我測試是一樣的),當前窗口對象(即test窗口),以及通過在index窗口通過create傳遞過來的myVar,然后就是所有窗口的輸出,第一個窗口是indx窗口,然后再是test窗口。最后調用hide()方法隱藏test窗口,當test窗口被隱藏后,在其下面的index窗口就顯現出來的。新建並顯示一個窗口類似於在一張紙上蓋上另外一張紙,會遮住一開始的那張紙,我們只能看到新的那張放在上面的紙。而當我們把上面的值拿開(隱藏)后,原來的那張紙就又出現了。當我們第二次來到index窗口時再點擊“顯示test”就會再次顯示出test窗口,這就相當於我們又把第二張紙蓋在了第一張紙上面,第一張紙又被隱藏了。但是注意,此時test窗口中的代碼並不會再執行一次,因為在我們創建並顯示test窗口時,這些代碼已經執行過了,我們隱藏和顯示test窗口並不是關閉它,只是暫時把它“拿開”了!還有一點很重要的是:一個靜態頁可以創建多個窗口!個人認為靜態頁與窗口的關系是一對多的關系。