缓存控制
http接口数据缓存
一直在做spa,应用内的页面切换没有接口数据缓存的问题,而从应用内切换到外部再回来的话,如果接口地址参数都不变,那么之前请求过的接口,会使用上一次请求拿到的数据,抓包工具显示请求根本没有发生。
解决方法就是:改改参数,比如加个时间戳。
js/css/img
对于静态资源可以更新文件名(如:文件名加hash),配合gulp,webpack等打包工具都可以实现。
index
尝试过在html中添加http-equiv的meta标签来控制response header,但在大部分安卓机上无效。
解决办法:在html标签上添加一个不存在的manifest,缺点是会造成一个额外的404请求
<html manifest="NOT_EXIST.manifest">
缓存控制涉及到http协议的知识,涉及catch control与三种header的用法。https://segmentfault.com/a/11...
音频
自动播放
Android:没问题(版本更新后可能会有自动播放失效的问题,怀疑与jssdk的初始化有关)。
iOS:由于苹果的限制必须配合微信接口做处理。
-
如果audio标签和audio资源都是静态的,那么只需要在
wx.ready
中调用play方法。如果是延迟的自动播放,那么你可能需要在页面加载完成后在ready中调用一次loadwx.ready(()=>{ audio.play(); // 延迟自动播放 // audio.load(); })
-
如果是静态的audio标签,而资源路径是通过接口拿到的,那么就需要把设置资源路径的操作也放到
wx.ready
中wx.ready(()=>{ audio.src = YOUR_AUDIO_URL; audio.play(); })
- 如果audio标签是页面加载后动态创建的,那么iOS版的微信想要实现自动播放貌似是不可能的,至少我是没有找到明确的方法,在此虚心求教。
-
对iOS音频自动播放的通用解决办法是把音频播放放在用户行为回调中,例如:给window添加一个touchstart的eventListener,在callBack中play
window.addEventListener('touchstart', function autoPlay() { audioElm.play(); window.removeEventListener('touchstart', autoPlay, true) }, true)
wxjssdk
接口权限的获取
SPA下路由模式只能用hash,config的页面URL不能携带hash部分
接口调用间隔
资源相关(图片录音)的接口,调用时需要有一个最小间隔时间,否则会调用失败,而且不报错,目前我是给了一个100ms的间隔,除了在首次录音(唤起权限弹框)时会偶尔返回'too short',其他接口都能正常运行。
分享
iOS的link不能包含未转码的特殊字符,在某些机型上会造成分享失败。
出现过success回调无法使用HTTPRequest的情况,延迟100ms即可。
二维码识别问题
网上找到的
- 二维码图片必须放在img标签里才能识别
- 一屏内不能出现两个二维码
- iOS 6.2.2中二维码的识别位置要比实际位置高64px(标题栏的高度),要在图片底部加padding。iOS 6.2.4中已修复
- viewport meta标签的设置,会影响二维码识别
我试出来的
- iOS微信客户端内,如果页面链接中含有未转码的特殊字符,可能会导致二维码无法识别
以上
如果遇到新的问题会继续更新
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。