1. 程式人生 > >hbuilder 開發APP填坑經驗

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