缓存控制

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中调用一次load

    wx.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微信客户端内,如果页面链接中含有未转码的特殊字符,可能会导致二维码无法识别

以上

如果遇到新的问题会继续更新


_lih
31 声望0 粉丝

前段爬坑小能手


« 上一篇
刮奖效果