hbuilder 開發APP填坑經驗
hbuilder中進行視窗管理有2種方式,一種是用了mui框架,可以用mui提供的管理方式,都封裝好了。
還有一種是沒有用mui,可以直接通過最底層的plus.webview來管理視窗的操作。
我們建立一個H5+的專案,在common.js中預設有對視窗管理的程式碼,可以直接使用。
在使用的過程中我遇到了下面的問題:
1,在APP下面有一個toolbar,目前每次點選一個按鈕都是通過webview建立一個新的view,view中去載入網頁(我們的功能實現都是通過h5的方式嵌入到app中)
common.js提供的方法原始碼如下:
/**
* 開啟新視窗
* @param {URIString} id : 要開啟頁面url
* @param {boolean} wa : 是否顯示等待框
* @param {boolean} ns : 是否不自動顯示
* @param {JSON} ws : Webview視窗屬性
*/
w.clicked=function(id,wa,ns,ws){
if(openw){//避免多次開啟同一個頁面
return null;
}
if(w.plus){
wa&&(waiting=plus.nativeUI.showWaiting());
ws=ws||{};
ws.scrollIndicator||(ws.scrollIndicator='none' );
ws.scalable||(ws.scalable=false);
var pre='';//'http://192.168.1.178:8080/h5/';
openw=plus.webview.create(pre+id,id,ws);
ns||openw.addEventListener('loaded',function(){//頁面載入完成後才顯示
// setTimeout(function(){//延後顯示可避免低端機上動畫時白屏
openw.show(as);
closeWaiting();
// },200);
},false);
openw.addEventListener('close',function(){//頁面關閉後可再次開啟
openw=null;
},false);
return openw;
}else{
w.open(id);
}
return null;
};
我們直接呼叫clicked(‘http://cxytiandi.com‘,true)就可以開啟猿天地的首頁,APP中toolbar對應的幾個模組的主頁肯定會來回切換的,導致每次切換都需要重新渲染,我通過改造clicked方法來實現下面的需求:
- 如果頁面對應的view沒建立,就建立新的
- 如果頁面對應的view已經存在,就直接開啟已經存在的
直接上改造後的程式碼:
wa&&(waiting=plus.nativeUI.showWaiting());
ws=ws||{};
ws.scrollIndicator||(ws.scrollIndicator='none');
ws.scalable||(ws.scalable=false);
var pre='';//'http://192.168.1.178:8080/h5/';
if(ws.createNew==false){
openw = plus.webview.getWebviewById( id );
if (openw == null) {
openw=plus.webview.create(pre+id,id,ws);
} else {
openw.show(as);
closeWaiting();
return openw;
}
} else {
openw=plus.webview.create(pre+id,id,ws);
}
通過在ws物件中加一個createNew引數來決定是否要建立新的view,如果配置為false的話,就通過plus.webview.getWebviewById去查詢之前有沒有建立過,有就直接顯示,不用建立了,使用程式碼如下:
clicked('http://cxytiandi.com',true, false,{createNew:false});
2,通過webview開啟的頁面,可以通過back()來返回到上個頁面,原始碼如下:
// 處理返回事件
w.back=function(hide){
if(w.plus){
ws||(ws=plus.webview.currentWebview());
if(hide||ws.preate){
ws.hide('auto');
}else{
ws.close('auto');
}
}else if(history.length>1){
history.back();
}else{
w.close();
}
};
有些場景,比如在我的主頁點選關注的使用者,進入使用者主頁,在使用者主頁取消關注,然後回退到我的主頁中,回退相當於重新開啟之前開啟過的view,這個時候我的頁面中的關注數還是之前的,取消關注的並沒有從總關注數中減去,今天我在回退的基礎上做了擴充套件,
可以支援回退的時候指定是否要重新整理上個頁面,可以解決這個問題。
但是重新整理頁面其實使用者體驗很差的,最好的辦法是非同步載入,只改變需要改變的地方,為了支援這個我還加了一個回撥的方法,可以支援方法回撥,你可以自己寫邏輯去實現資料重新整理。
主要還是改造clicked方法,因為view是在clicked中建立的,在回退的時候我們可以通過監聽view的close方法來實現這個操作
openw.addEventListener('close',function(){//頁面關閉後可再次開啟
//可以設定頁面關閉時回撥的方法,可以對資料進行重新載入操作
if(callback){
callback(callbackParams);
}
//頁面關閉時需要重新整理上個頁面
if (ws.closeRefresh==true){
window.location.reload();
}
openw=null;
},false);
完整的clicked方法如下:
/**
* 開啟新視窗
* @param {URIString} id : 要開啟頁面url
* @param {boolean} wa : 是否顯示等待框
* @param {boolean} ns : 是否不自動顯示
* @param {JSON} ws : Webview視窗屬性
* @param {function} callback : 頁面回退關閉時執行的回撥方法
* @param {JSON} callbackParams : 回撥方法的引數
*/
w.clicked=function(id,wa,ns,ws,callback,callbackParams){
/*if(openw){//避免多次開啟同一個頁面
return null;
}*/
if(w.plus){
wa&&(waiting=plus.nativeUI.showWaiting());
ws=ws||{};
ws.scrollIndicator||(ws.scrollIndicator='none');
ws.scalable||(ws.scalable=false);
var pre='';//'http://192.168.1.178:8080/h5/';
if(ws.createNew==false){
openw = plus.webview.getWebviewById( id );
if (openw == null) {
openw=plus.webview.create(pre+id,id,ws);
} else {
openw.show(as);
closeWaiting();
return openw;
}
} else {
openw=plus.webview.create(pre+id,id,ws);
}
ns||openw.addEventListener('loaded',function(){//頁面載入完成後才顯示
// setTimeout(function(){//延後顯示可避免低端機上動畫時白屏
openw.show(as);
closeWaiting();
// },200);
},false);
openw.addEventListener('close',function(){//頁面關閉後可再次開啟
//可以設定頁面關閉時回撥的方法,可以對資料進行重新載入操作
if(callback){
callback(callbackParams);
}
//頁面關閉時需要重新整理上個頁面
if (ws.closeRefresh==true){
window.location.reload();
}
openw=null;
},false);
return openw;
}else{
w.open(id);
}
return null;
};
回退關閉時重新整理使用程式碼如下:
clicked('http://cxytiandi.com',true, false,{closeRefresh:true});
回退關閉時執行回撥程式碼使用程式碼如下:
clicked('http://cxytiandi.com',true, false,{},ref,{id:1001});
function ref(data) {
console.log(data.id);
}
3, 安卓手機上都有一個回退的按鈕,相當於蘋果中從左往右滑動,到了主頁的時候如果點選了2次回退的按鈕,需要提示是否退出app,這個可以通過監聽來實現:
function plusReady(){
ws=plus.webview.currentWebview();
// Android處理返回鍵
plus.key.addEventListener('backbutton',function(){
var hurl = window.location.href;
if(hurl.indexOf("/house/index") > 0 || hurl.indexOf("/quotations/index") > 0
|| hurl.indexOf("/loanInfo/list") > 0 || hurl.indexOf("/selfInfo/index") > 0) {
plus.nativeUI.confirm("確認退出",function(e) {
if(e.index == 0) {
plus.runtime.quit();
}
});
} else {
back();
}
},false);
compatibleAdjust();
}
相關推薦
hbuilder 開發APP填坑經驗
hbuilder中進行視窗管理有2種方式,一種是用了mui框架,可以用mui提供的管理方式,都封裝好了。 還有一種是沒有用mui,可以直接通過最底層的plus.webview來管理視窗的操作。 我們建立一個H5+的專案,在common.js中預設有對視窗
HBuilder開發App教程03-定制圖標,啟動頁以及打包
頂部 版本 默認 升級 clas art app名稱 支付 新版 helloworld 上次說到了helloworld。你應該已經能夠新建項目。真機調試了, 這次來說說圖標的定制,啟動頁的定制以及打包。 圖標定制 假設不定制圖標的話,默認會是博文頂部圖表的樣子,
Hbuilder開發app實戰-識歲01-actionsheet實例
build builder ace popu div 接口 一是 識別 cancel 前言 之前寫了HBuilder開發App入門-滴石。相信大家看完後應該能夠入門了, 之後會做一些簡單的app。把nativejs一些經常使用的功能都過一遍,這樣以後做app就沒什麽難
Hbuilder開發app時生成ios要的mobileprovision和p12文件步驟.
。。 hbuilder p12 mob req mobile 右擊 文件下載 鑰匙 1.在MAC電腦.鑰匙串串訪問->證書助理->從證書頒發機構請求證書,創建一個證書為certSigningRequest文件 2.在Apple Developer中的Certi
學用HBuilder開發App的看過來
專業 應用技術 移動 hbuilder 支持 當前 app開發 nbsp bsp 自己的嘔心瀝血之作吧,花了一年時間,系統介紹HTML5 App開發的相關技術。 越來越多的公司采用HTML5來快速開發移動跨平臺App,它支持當前市場流行的移
Hbuilder開發app實戰-識歲06-face++的js實現【完結】
前言 由於識歲app比較簡單,所以這節就完結吧, 當然還有一些可以優化完善的地方,但是個人興趣不是很大, 有想繼續完善的,原始碼在這裡:https://github.com/uikoo9/shisui face++ 在簡單的介紹下face++, 不久前,微軟推
Hbuilder開發app實戰-識歲05-Crypto.js實現各種js加密演算法
前言 js加密,應該說做js開發的很少接觸到這一塊,因為很多時候都是做加密,很少有前端做加密的, 很榮幸我接觸過兩次,找到了crypto.js,很好的東西,可以實現各種js加密。 吐槽 吐槽下前端做加密,一般來說前端做加密這需求是很少的,極少的, 我卻碰到了兩次,
HBuilder開發APP(二)——網路請求
mui框架中給我們封裝好了常用的Ajax函式,是基於XMLHttpRequest,支援GET、POST請求方式,支援返回json、xml、html、text、script資料型別。 mui
Hbuilder開發app實戰-識歲04-七牛雲上傳檔案的js實現
七牛雲上傳 七牛雲的上傳支援很多種語言,我用過的有java和js,個人感覺都比較方便, 當然java要比js方便一點吧,由於是app中要上傳到七牛雲,所以不可能使用java, 就看拉看七牛雲的js上傳,詳見這裡:http://developer.qiniu.com/docs/v6/api/o
HBuilder開發App教程06-首頁
實戰 前面幾節基本是一些概念的普及, 正如前面提到的,本教程會以滴石作為範例進行講解, 有興趣的可以先行下載體驗一下,或者下載原始碼研究下。 新建專案 開啟HBuilder,在專案管理器中右鍵——新建——移動app,或者直接ctrl+n,a, 見到如下介面,填入專案名稱
Hbuilder開發APP(一)——底部導航條簡單實現
Hbuilder是由DCloud(數字天堂)推出的一款支援HTML5的Web開發IDE,它最大的特點及優勢就是——快,通過完整的語法提示和程式碼輸入法、程式碼塊及很多配套,Hbuilder能大幅度提升HTML、js、css的開發效率。並且HBuilder本身
HBuilder開發App教程13-ios除錯以及釋出【完結】
完結 不知不覺,教程就完結了,感覺很快,有可能是app過於簡單吧,或者自己講的不是很詳細? 不管怎麼樣,總算完結了,附一張美女圖片,犒勞下~ ios除錯 之前的真機除錯一直是用的android真機,今天用了下iphone6,感覺也沒啥難度,具體如下: 1.首先你需要有一
使用Hbuilder開發App,打包App
工具Hbuilder是由DCloud推出的一款支援HTML5的Web開發IDE。支援開發檢視、邊改邊看模式、webview除錯模式、團隊同步檢視。也可以連線真機或使用模擬器直接執行。由於使用了MUI的一些元件,並且本次的執行環境定位於點餐商家介面的移動APP。真機的好處在於可
Ubuntu + Eclipse + Tomcat 配置 Java Web 開發環境填坑筆記
前言 從 Eclipse 官網 上下載到的 Eclipse Neon 是不帶外掛的, 要配置出一個 Java Web 開發環境, 尚需各種折騰. 把踩到的坑記錄一下備忘. Eclipse 基本配置: 使用 shadow sock 科學上網,需要配置代
MUI+H5plus+HBuilder開發app(android,ios)介紹
前言 現在介紹一款只需要懂html+css+js就能開發app的框架,不需要懂原生語言,完全只需要前端web工程師就能獨立開發出android和ios的應用,且一套程式碼搞定,效率很高。(其實更省事可以wap,android和ios一套帶走,一下R閃秒3個平臺
HBuilder開發App教程08-幾種頁面開啟方式
說明 上節說了list頁面的實現,其中關於幾種頁面的開啟方式沒有詳細述說, 本節詳細述說下幾種頁面開啟方式的區別。 幾種開啟頁面的方式 1.初始化時建立子頁面 2.直接開啟新頁面 3.預載入頁面 示例 1.初始化時建立子頁面 mui.init({ subpage
hbuilder 開發5+ APP採坑記錄
開發一款APP產品需要在安卓和蘋果2大平臺釋出,同時開發團隊也需要有安卓和IOS。 HTML5 Plus移動App,簡稱5+App,是一種基於HTML、JS、CSS編寫的運行於手機端的App,這種App可以通過擴充套件的JS API任意呼叫手機的原生能力,實現
支付開發填坑記之微信支付
wiki index 傳輸 系統 外網 ttr throw div union 微信支付,支持的支付方式比較多:有掃碼支付,刷卡支付,APP支付和公眾號支付。其中,APP和網站上最常用的就是APP支付和公眾號支付。前者集成在APP中,後者主要是為微信用戶提供了另一種支付方式
記錄混合APP開發遇到的坑!!
col blog 長按 點擊 綁定 click 添加 lec sele 1、在IOS中給body綁定click事件會失效 2、在IOS中<div contenteditable="true"></div>中點擊時可以彈出鍵盤但是無法輸入。加一個樣式-
[日常填坑]部署使用Idea開發的spring框架的多模塊項目到服務器
pro cat cti 目的 pac app 文件 per pps 首先,先題外話總結在本地Idea啟動spring boot框架項目的方式(普通spring項目運行可以自行百度): 註意:默認開發的web項目完整能運行 方式1. 如果部署的時候沒有配置spri