第三方网站返回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         }

经测试,解决此问题。

原文地址:https://www.cnblogs.com/keang001/p/9603695.html

时间: 2024-10-08 21:22:28

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

Xcode导出ipa,给越狱的iPhone测试和ipa发布到第三方网站直接下载APP安装

由于apple的限制,未加入开发者的iPhone.iPad.iPod touch设备是不能直接安装我们开发的APP(未发布到APP store).下面我们介绍怎么使用Xcode导出ipa给已经越狱的设备测试. 1.打开Xcode,并新建一个工程,如下图: 然后单击TestScheme.app右键,”show in finder“打开所在位置 2.在finder中将该APP拖到iTunes 的应用程序中 3.单击TestScheme,在 finder 中显示,就可以看到如下图所示 4.将该ipa发

springboot和redis处理页面缓存

页面缓存是应对高并发的一个比较常见的方案,当请求页面的时候,会先查询redis缓存中是否存在,若存在则直接从缓存中返回页面,否则会通过代码逻辑去渲染页面,并将渲染后的页面缓存到redis中,然后返回.下面通过简单的demo来描述这一过程:  一.准备工作: 1.新建一个springboot工程,命名为novel,添加如下依赖: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h

移动web:原生开发打包,嵌入h5页面 webApp:全部都是H5开发的应用 混合APP:使用第三方开发平台从apicloud,appcan,hbuilder等开发,cordova技术打包 原生APP:就是eclipse开发或者studio等工具开发

论坛43213 移动端webApp兼容问题解决 谈谈App混合开发 Hybrid APP混合开发的一些经验和总结 PhoneGap是一个采用HTML,CSS和JavaScript的技术,创建移动跨平台移动应用程序的快速开发平台.它使开发者能够在网页中调用IOS,Android,Palm,Symbian,WP7,WP8,Bada和Blackberry等智能手机的核心功能--包括地理定位,加速器,联系人,声音和振动等,此外PhoneGap拥有丰富的插件,可以调用. Cordova提供了一组设备相关的

Hybrid APP之Native和H5页面交互

Hybrid APP之Native和H5页面交互原理 Hybrid APP的关键是原生页面与H5页面直接的交互,如下图,痛过JSBridge,H5页面可以调用Native的api,Native也可调用H5页面的方法或者通知H5页面回调 在Hybrid APP中,原生与H5的交互方式在Android和iOS上的实现是有异同的,原因是Android.iOS的通信机制有所区别,下面介绍原生和H5相互调用的方法 Native与H5交互的两种方式 原生和前端的交互有两种方式:url scheme以及Jav

Hybrid App中原生页面 VS H5页面

来源:http://www.jianshu.com/p/00ff5664e000 [原文丰富,请看原文] 现有3类主流APP,分别为:Web App.Hybrid App(混合模式移动应用,Hybrid有“混合的”意思). Native App(原生app,后面都用“原生app”来描述).Web App和原生app有很多大牛们都做过比较详细的比较以及优劣势分析,我主要对Hybrid App来简要分析下,谈谈Hybrid App里原生页面和H5页面的比较和分析. Hybrid APP指的是半原生半

APP中H5页面返回

内嵌到APP里面的H5页面,当点击APP上的返回按钮或者手机上的返回按钮时,如果H5页面不是页面的跳转,而是仅仅的Tab切换时,就会出现直接跳出页面的情况. 解决的办法: function isVisible(obj){ var ret = true; if(obj.style.display === "none"){ ret = false; } return ret; } function showPage(){ var p1 = $(".pagesa"); v

微信h5页面中跳转下载第三方app的办法

需求:在微信h5页面中下载第三方app -- 安卓, 直接下载apk文件包:iphone,跳转AppStore 分析:微信不支持,在微信中屏蔽了apk文件的下载以及AppStore的跳转(且除非和TX有合作的应用,否则也不支持通过scheme跳转第三方app) 变通方法: 一.借助TX的应用市场 --'应用宝':将app上架应用宝,在微信中点击下载按钮(app的应用宝微下载地址),安卓则可跳转应用直接进行下载,iphone则会自动跳转Appstore(需在TX开发平台进行配置) 总结:虽然这种方

Hybrid容器设计之第三方网站

平台化容器API释放 接上文:(阅读本文前,建议阅读前三篇文章先) 浅谈Hybrid技术的设计与实现 浅谈Hybrid技术的设计与实现第二弹 浅谈Hybrid技术的设计与实现第三弹——落地篇 之前设计Hybrid整块交互的时候,受众都是自己的团队,没有想往“公司化”和“平台化”方向发展,而近期业务的发展逐渐超出预期了,慢慢会有第三方网站接入我们的APP,而且第三方网站还会用一些Native的能力,这个时候之前的使用似乎就不太合适了,所谓JS-SDK就需要存在了. 类似这种需求,做的最完善的当属微

iOS原生App与H5页面交互

文/MikeZhangpy(简书作者)原文链接:http://www.jianshu.com/p/4ed3e5ed99c6著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 最近在做一个项目用到了原生App与H5交互,之前有做过简单的H5页面直接调用原生方法的例子,就是利用UIWebView中的代理方法 //webview每次加载之前都会调用这个方法,利用该代理方法截取JS的href来调用原生的方法 - (BOOL)webView:(UIWebView*)webView should