第三方网站返回hybrid app H5页面缓存问题应对策略

  最近负责公司各产品线购买模块的开发,各项功能如期开发完成后测试那边反馈回来一个问题:IOS手机在点击支付宝购买后,跳转到支付宝网站时不输入支付密码,直接点返回,返回到我们自己的APP购买界面发现参数丢失,数据都没有了,不能完整的还原整个购买界面,安卓手机不存在这个问题。经排查,原来是苹果手机的缓存策略导致,从第三方支付宝网站返回后,苹果手机缓存了无参数的购买页面,导致返回的时候不再发送post请求去服务器请求数据,只是get了一个无参数的页面,导致异常。

  这个问题比较棘手,因为我们已经使用了cookies来存储页面数据,当没有页面参数传入的时候就去cookie里面取,这种方法对安卓手机是管用的,但是对于IOS的缓存策略,这手机已经不会再去取参数了,只会get到缓存过的无参数的页面,因此我们需要单独针对IOS的移动设备做解决方案。.

  经尝试,决定使用sessionStorage来规避IOS页面被缓存的问题。正请求使用SessionStorage来存储参数,然后和缓存的历史页面参数做对比,不一致则location.reload(true)强制刷新。关键代码如下:

 1 beforeCreate() {
 2             let ua = navigator.userAgent.toLowerCase();
 3             if (ua.indexOf(‘ipad‘) > -1 || ua.indexOf(‘iphone‘) > -1) {
 4                 try {
 5                     let key = ‘_purchase_page_params_‘,
 6                         deviceId = PAGE_PARAMS.deviceId;
 7                     if (history.length > 1) {//当从第三方页面返回
 8                         if (!deviceId) {  //若没有获取到设备id,则强制刷新
 9                             location.reload(true);
10                         } else {
11                             let storageParams = null,
12                                 str = sessionStorage.getItem(key) || ‘‘;
13                             if (str) {
14                                 storageParams = JSON.parse(str);
15                             }
16                             if (storageParams && storageParams.deviceId !== deviceId) {//对比参数,不一致则强制刷新
17                                 location.reload(true);
18                             }
19                         }
20                     } else {
21                         sessionStorage.setItem(key, JSON.stringify(PAGE_PARAMS));
22                     }
23                 } catch (e) {
24                     console.error(e.message);
25                 }
26             }
27         }

经测试,解决此问题。

第三方网站返回hybrid app H5页面缓存问题应对策略

上一篇:Android实战——第三方服务之Bmob后端云的推送服务的集成和使用(三)


下一篇:Linux编程 5 (目录重命名与移动mv,删除文件rm,目录创建mkdir删除rmdir,查看file,cat,more,tail,head)