微信Webapp開發的各種變態路由需求及解決辦法!

原文鏈接: https://segmentfault.com/a/1190000015493097

前言

最近在使用BUI Webapp開發的一個小商城項目在微信上遇到一些坑及變態需求, 層層深入, 整理一下給後來人參考.

微信Webapp開發的各種變態路由需求及解決辦法!

調試緩存

問題描述: 微信打開的web頁面默認是會緩存的,這是為了加載更快,本來是好事,但對於用來調試的我們就比較痛苦了,每每更改一些js,html, 刷新以後,怎麼樣都去不掉.

解決辦法: 每次修改html 在後面增加? 參數, 每次修改js, 在頁面引入的時候, 增加問號加時間戳的方式..但依然很痛苦.

BUI Webapp 的處理方案:

index.js

// 去除模塊緩存

window.loader = bui.loader({

cache: false

})

在路由初始化之前,先去掉模塊的緩存, 這樣每次進入頁面,都會是一個新的腳本, 也就沒有緩存問題了.

後退頁面刷新

問題描述: 跟前面的緩存有點關係,正常web頁面第一次加載以後就會被緩存下來, 所以你想要後退並刷新,那是不好處理的.

BUI Webapp 的處理方案:

// 方案: 後退全局刷新

router.back({

callback: function(){

router.refresh()

}

})

後退局部刷新

問題描述: 如果說後退刷新還比較簡單,那如果頁面需要局部刷新呢, 客戶就不想出現閃白.

BUI Webapp 的處理方案:

// 方案: 後退局部刷新

router.back({

callback: function(mod){

// mod為後退以後頁面拋出來的模塊. 你可以自定義你的局部方法處理.

mod.init()

}

})

後退多層刷新

問題描述: 比方當前路由狀態: 首頁->列表頁->表單頁->成功失敗-->列表頁, 成功失敗頁以後要跳回列表頁.

BUI Webapp 的處理方案:

// 方案: 後退2層刷新

router.back({

index: -2,

callback: function(mod){

// mod為後退以後當前頁面拋出來的list模塊. 你可以自定義你的刷新處理.

mod.init()

}

})

後退到指定頁面

問題描述: 當你的頁面有多個入口,入口的層級不一致, 通過索引後退的方式就不能用了,

比方表單頁, 入口1: 首頁->列表頁->表單頁 入口2: 首頁->表單頁, 這時表單頁的後退怎樣才能後退到首頁?

BUI Webapp 的處理方案:

// 方案: 通過指定模塊名後退,模塊名默認為頁面的路徑. `main` 則為首頁已經聲明的默認模塊.

router.back({

name: "main",

callback: function(mod){

// mod為後退以後當前頁面拋出來的模塊. 你可以自定義你的刷新處理.

mod.init()

}

})

後退指定頁面並指定第幾個TAB

問題描述: 首頁底部有5個TAB, 我在表單頁後退的時候,想後退到首頁第4個tab-購物車 .

BUI Webapp 的處理方案:

main.js

loader.define(function(){

var pageview = {};

// slide 控件為BUI的TAB選項卡

pageview.slide = bui.slide();

pageview.init = function(){}

pageview.init();

// 拋出main模塊的方法

return pageview;

})

form.js

// 方案: 通過指定模塊名後退,模塊名默認為頁面的路徑. `main` 則為首頁已經聲明的默認模塊.

router.back({

name: "main",

callback: function(mod){

// mod為後退以後當前頁面拋出來的main模塊. 拿到slide調用控件的to方法,索引從0開始.

mod.slide.to(2);

}

})

物理按鍵後退刷新

問題描述: 開發移動webapp少不了要對移動物理按鍵的監聽,通過上面的方案我們可以實現按鈕點擊的時候後退刷新, 而用戶如果點擊的是安卓的物理後退按鍵呢?

BUI Webapp 的處理方案: 通過在首頁監聽全局後退事件處理.

index.js

router.on("back",function(e){

var nowPid = e.target.pid,

prevPid = e.prevTarget.pid;

// 如果後退到首頁則刷新

if( nowPid === "main" ){

// 加載首頁模塊的方法

loader.require(nowPid,function(mod){

mod.init();

})

}

})

問題描述: 首頁底部有4個TAB,當點擊進入第2個頁面的時候, 如果第2個頁面也有TAB, 會被微信底部的工具欄遮擋, 這是蘋果版微信獨有的.

BUI Webapp 的處理方案: 這個坑是因為歷史記錄引起的, 針對IOS的路由初始化時去除歷史紀錄.

index.js

bui.ready(function () {

// IOS版的微信,不需要同步歷史記錄

var needHistory = bui.platform.isIos() && bui.platform.isWeiXin() ? false : true;

// 初始化路由

router.init({

id: "#bui-router",

syncHistory: needHistory,

})

})

頁面跳轉到指定TAB

問題描述: A頁面有2個按鈕, 點擊分別跳轉到B頁面的2個TAB選項卡.

BUI Webapp 的處理方案:

A.js

$("#btn1").on("click",function(){

bui.load({

url: "pages/b.html",

param: {

index: 0

}

})

})

$("#btn2").on("click",function(){

bui.load({

url: "pages/b.html",

param: {

index: 1

}

})

})

B.js

// 接收頁面傳過來的參數

var param = router.getPageParams();

// 初始化選項卡在第幾個

var slide = bui.slide({

index: param.index || 0,

...

})

關於BUI Webapp

BUI Webapp是一個基於Zeptojs或jQuery的UI交互框架, 專注Webapp開發, 提供豐富的組件,靈活的定製,超多的模板及參考案例, 幫助開發者快速構建Webapp, 最終可以在瀏覽器,微信公眾號運行,以及結合Dcloud,ApiCloud,Appcan 等第三方平臺打包成 Hybrid App, 完美適配, 一次開發, 多端運行, 並保持一致體驗.

微信Webapp開發的各種變態路由需求及解決辦法!


分享到:


相關文章: