do_Webview和H5的介紹
AppWorker平臺并不是基于html5的跨平臺開發(fā)工具矾利。我們開發(fā)一個app都是使用原生的組件,但是在某些場景下html5也是非常好的選擇,比如復(fù)雜的圖文混排(類似新聞),比如報表chart之類用html很方便。如果你對html相關(guān)技術(shù)熟悉的話槐壳,你也可以在更多場景使用。
do_Webview的組件的API文檔參考這里
我們從二個方面來介紹:
加載網(wǎng)頁
這是基本功能喜每,加載網(wǎng)頁很簡單就是通過設(shè)置url屬性為本地html(data://,source://協(xié)議) 和web網(wǎng)頁(http://
,https://
協(xié)議) 务唐。
do_Webview加載網(wǎng)頁你可以理解為就像一個內(nèi)嵌的瀏覽器打開網(wǎng)頁一樣,常用的js灼卢,css等所有和web相關(guān)的技術(shù)都支持绍哎,通常手機(jī)都帶了缺省的瀏覽器,這個瀏覽器的核心和do_Webview是一致的鞋真。
當(dāng)然還是有可能有細(xì)微差別崇堰,瀏覽器相對來說成熟更多,容錯和兼容性更強(qiáng)涩咖。
var webview = ui("do_webview_id1");
webview.url = "source://view/test.htm";
webview.url = "http://www.baidu.com"
html相關(guān)的技術(shù)太多海诲,我們這里不再做介紹,不屬于appworker平臺的范疇檩互。
這里提供一個簡單的示例特幔,加載jquerymobile的示例。
調(diào)用appworker其它組件
這個是重點闸昨,do_Webview組件是AppWorker提供了眾多組件中一個蚯斯,這個組件是一個ui文件里的一部分薄风,可以實現(xiàn)它和其它組件的交互。在html里面的js代碼能調(diào)用其它MM拍嵌,SM和UI組件遭赂。
和在ui.js里調(diào)用AppWorker的API類似,唯一區(qū)別是所有與AppWorker相關(guān)的操作都必須放在onDeviceOneLoaded
回調(diào)函數(shù)里横辆,這個回調(diào)函數(shù)有點類似JQuery的ready方法撇他。
SM和MM的使用方法完全一樣,但是對UI的操作建議是通過觸發(fā)page的消息來處理狈蚤。比如test.html加載在test.ui里的webview組件里困肩,如果test.html需要控制test.ui里的其它ui,最好的方式是在test.html里的js代碼發(fā)送一個page作用域的消息給test.ui.js脆侮,在test.ui.js里去操作其它ui組件锌畸。
可以參考以下示例,這個示例完整展示了調(diào)用SM他嚷,MM蹋绽,UI的方法:
//login.html
<Script>
var login = document.getElementById("login");
var back = document.getElementById("back");
//所有和AppWorker相關(guān)的調(diào)用都需要放在onAppWorkerLoaded回調(diào)函數(shù)里芭毙,類似JQuery的ready方法
window.onDeviceOneLoaded = function() {
// sm對象的獲取和在ui.js里獲取沒有差別
var nf = sm("do_Notification");
var app = sm("do_App");
var page = sm("do_Page");
login.onclick = function() {
var name = document.getElementById("loginName").value;
var pwd = document.getElementById("loginPwd").value;
if (!name || !pwd) {
//調(diào)用原生的alert方法
nf.alert("用戶名或密碼不能為空!")
} else
loginNewPage(http, page);
}
back.onclick = function() {
//點擊html的按鈕返回到前一個page
app.closePage();
}
// mm對象的創(chuàng)建和在ui.js里沒有區(qū)別
var http = mm("do_Http");
http.method = "POST";
http.on("result", function(data) {
//對ui的操作最好是通過消息發(fā)送到ui.js里去做筋蓖,而不是直接在html里操作
page.fire("progressbar", "hide");
if (data.status == 200) {
app.openPage({
source : "source://view/main.ui",
statusBarState : "transparent"
});
}
});
}
function loginNewPage(http, page) {
http.url = "http://www.baidu.com";
http.request();
//對ui的操作最好是通過消息發(fā)送到ui.js里去做,而不是直接在html里操作
page.fire("progressbar", "show");
}
</Script>
上面的示例可以看到通過加裝本地html可以直接訪問AppWorker的任何API退敦,包括html不支持的本地讀寫等操作粘咖。
完整的示例參考這里
另外加載web頁面,也就是http:// 的頁面其實也可以訪問AppWorker的任何API侈百,這會帶來一個安全問題瓮下,所以do_Webview組件增加一個屬性來控制,如果這個屬性為false钝域,則無法調(diào)用AppWorker的其它組件了
webview.allowAppWorker = false;