前言

最近在使用BUI 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开发的各种变态路由需求及解决办法!的更多相关文章

  1. 微信h5页面下拉露出网页来源的解决办法

    微信h5页面下拉露出网页来源的解决办法:将document的touchmove事件禁止掉 //禁止页面拖动 document.addEventListener('touchmove', functio ...

  2. 微信支付之扫码支付开发:我遇到的坑及解决办法(附:Ecshop 微信支付插件)

    前段时间帮一个朋友的基于ecshop开发的商城加入微信扫描支付功能,本以为是很简单的事儿——下载官方sdk或开发帮助文档,按着里面的做就ok了,谁知折腾了两三天的时间才算搞定,中间也带着疑问在网上找了 ...

  3. Android开发 |常见的内存泄漏问题及解决办法

    在Android开发中,内存泄漏是比较常见的问题,有过一些Android编程经历的童鞋应该都遇到过,但为什么会出现内存泄漏呢?内存泄漏又有什么影响呢? 在Android程序开发中,当一个对象已经不需要 ...

  4. IOS 中微信 网页授权报 key[也就是code]失效 解决办法

    枪魂微信平台ios手机点击返回 网页授权失败,报key失效.已经解决,原因是授权key只能使用一次,再次使用就会失效. 解决办法:第一次从菜单中进行授权时,用session记录key和open_id. ...

  5. 微信1.8.6.1 SDK 无法授权登录解决办法

    我用的cocos2d-lua 3.9 项目打包 调用微信授权登录的时候 授权登录接口一直抛异常导致微信都无法拉起来 按照官网配置了universal link (这个也搞了很长时间jason 配置文件 ...

  6. java微信公众号开发token验证失败的问题及解决办法

    本文引自http://m.blog.csdn.net/qq_32331997/article/details/72885424 微信公众平台服务器配置时,需要引入token,但是提交的时候总是提示to ...

  7. 【原创】Ionic单页应用跳转外链,构造路由返回的解决办法及代码

    在开发广汽菲克微信企业号的填单审批webApp的时候出现了一个问题: 单据是带有附件的,而且存在各种不同的格式,需要后台处理后给前台链接地址,点击预览,微信浏览器的特性就是只能存在一个浏览器窗口, 这 ...

  8. 多人开发Xcode工程冲突,打不开解决办法

    在公司多人协作开发,相信好多程序员都遇到非常忧伤的问题,就是工程打不开,这样就无从下手,好多程序怨只能再从代码服务器上下载一份新的代码,今天军哥教你几个小技巧,让你的bigger瞬间提升一个档次 在公 ...

  9. windows8安装xna4.0不能开发Xbox和PC端游戏的解决办法

    vs2012安装wp8后,只能开发手机端的xna游戏程序,没有xbox和pc端的,看来官方是不打算更新了,不过我们还是有办法的. 前提条件下,您得安装了vs2010和xna4.0 game studi ...

随机推荐

  1. 【STM32项目笔记】STM32CubeMX+Keil+Proteus联合实现LED闪烁

    摘要 利用STM32CubeMx配置STM32芯片的功能,然后将配置后的内容生成代码,并导出成可以使用Keil打开编辑的文件,在Keil中添加控制代码后,下载到Proteus仿真中,使用仿真观察代码执 ...

  2. Java中toString()与new String()

    Java中toString()与new String(): 1.错误演示: FileInputStream fileIn = new FileInputStream(filePath);byte[] ...

  3. 路由与交换,cisco路由器配置,动态路由协议—RIP

    一.动态路由协议分类 动态路由协议包括IGP(内部网关协议)和EGP(外部网关协议). 1.IGP IGP又包括距离向量路由协议和链路状态路由协议. (1)距离向量路由协议典型代表:RIP (2)链路 ...

  4. redis 非关系型数据库

    redis 类型,数据存在磁盘里面,所以存储速度比较快,其他数据类型还是存储在数据库所以比较慢些 链接redis数据库: r=redis.Redis(host="%%%%%%%", ...

  5. 中阶d01-- web前端 html css js bootstrap

    html 页面骨架结构css 页面优化js(脚本语言) 页面和用户互动 bootstrap 前端框架,主要实现不同设备直接打开页面时播放比例设置(全屏暂时,不要滚动条)

  6. [一起面试AI]NO.9 如何判断函数凸或非凸

    首先定义凸集,如果x,y属于某个集合M,并且所有的θx+(1-θ)f(y)也属于M,那么M为一个凸集.如果函数f的定义域是凸集,并且满足 f(θx+(1-θ)y)≤θf(x)+(1-θ)f(y) 则该 ...

  7. break与continue对比

    - break 用来终止循环 - continue 用来跳出当前循环,继续下次循环 // 求1到100之间所有不能被3整除的整数的第一个大于2000的和 var sum = 0; for(var i= ...

  8. 【three.js第六课】物体3D化

    1.在[three.js第五课]的基础上引入AnaglyphEffect.js文件. 文件路径: three源码包中进入[examples]文件夹: 进入[js]文件夹: 进入[effects]文件夹 ...

  9. A Bug's Life POJ - 2492 (种类或带权并查集)

    这个题目的写法有很多,用二分图染色也可以写,思路很好想,这里我们用关于并查集的两种写法来做. 题目大意:输入x,y表示x和y交配,然后判断是否有同性恋. 1 带权并查集: 我们可以用边的权值来表示一种 ...

  10. python操作数据库-SQLSERVER-pyodbc

    刚开始学python时,大家都习惯用pymssql去读写SQLSERVER.但是实际使用过程中,pymssql的读写性能以及可靠性的确不如pyodbc来的好. 正如微软官方推荐使用pyodbc库,作为 ...