解决浏览器差异导致从子页面回到父页面,父页面不刷新的问题

概述:

  在做H5混合开发的时候总是会遇到浏览器差异、不兼容导致同样的代码,IOS和Andoird其中之一出现不可预见的问题。
  我的问题也是如此,我的需求是从父页面跳转子页面,子页面提交后返回父页面,并且父页面刷新。
  Android的Chrome浏览器对这个需求就很容易支持,因为他每次页面重新显示的时候,都会刷新整个页面。而IOS的Safari浏览器出现了问题,Safari浏览器会读取缓存,不会重新刷新页面。

如何解决:

  解决这个问题找到方法就很简单。总体思路是在子页面返回时,告知父页面刷新。并且只在IOS上执行这个操作,否则Android会刷新两遍。
  由于笔者对JS并不算精通,最初是想参考Android原生的回调操作,利用js实现页面回调,最后没能实现。然后考虑利用浏览器的生命周期,在H5中应该叫做事件,来处理。
  最后找到了onpageshow事件。它是在页面显示的时候响应,同时支持Chrome和Safari。
  由于项目特许原因,不能使用H5+的内容,笔者解决这个问题也是煞费苦心

示例代码

<body onpageshow="loadDetail()">
<script>
var loadDetail = function() {
                    var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
                    var isSafari = userAgent.indexOf("Safari") > -1 && userAgent.indexOf("Chrome") == -1; //判断是否Safari浏览器
                    if(isSafari) {
                        window.localStorage.setItem("sfF5", "0");
                        getTaskDetailData();
                    }
                }
</script>

注意:

  笔者在利用上述方法时,起初遇到了问题,在Chrome浏览器和Safari浏览器测试通过后,放在IOS手机上运行时发现onpageshow事件并不执行。最后发现是承载Html的IOS原生壳用了新的wkWebview导致,换回以前的WebView成功解决。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,596评论 1 45
  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,526评论 1 11
  • 一、基础知识篇:Http Header之User-AgentUser Agent中文名为用户代理,是Http协议中...
    iPhone阅读 15,832评论 0 13
  • 小时候觉得一辈子很长 长得 总为长不大发愁 长大了 又觉得自己很富有 可消费的时间依旧 不知不觉 划过中年 偶一...
    墨溪0303阅读 263评论 0 1
  • 晚上在店里吃个肠粉、里面有个女生吃完就喊店里的老板华健请你吃糖,一直塞到小伙子手上,还以为他们是认识的。结果她好不...
    樂馭阅读 196评论 0 0