浏览器后退刷新 php,点击浏览器的返回按钮,就会刷新历史页面这个问题的解决方案...

首先我们知道这个问题是如何发生的,假如我们有如下页面列表信息页面,点击进入详情页面,在详情页面修改了数据通过历史返回,再返回到列表信息页面,因为列表信息是历史返回的,还是默认显示原来修改前的数据,要刷新一下才是修改后的数据,那么我们有什么办法可以点击手机返回按钮就可以刷新之前历史页面中的数据呢?

onpageshow事件和onload事件。 onpageshow 事件类似于 onload 事件,onload 事件在页面第一次加载时触发, onpageshow 事件在每次加载页面时触发,即 onload 事件在页面从浏览器缓存中读取时不触发。

为了查看页面是直接从服务器上载入还是从缓存中读取,你可以使用 PageTransitionEvent 对象的 persisted 属性来判断。 如果页面从浏览器的缓存中读取该属性返回 ture,否则返回 false

解决方案

通过onload方式

代码如下:

页面中写一个隐藏的input

js操作如下οnlοad=function(){

var refreshedId=document.getElementById("refreshed");

if(refreshedId.value=="no"){

refreshedId.value="yes";

} else{

refreshedId.value="no";

location.reload();

}

}

通过onpageshow 方式

这种方式在电脑上是没有问题的,但是苹果safari中返回不执行onload事件,要用如下方式:window.onpageshow = function(event) {

if (event.persisted) {

window.location.reload()

}

};

通过实际操作发现,event.persisted在电脑中一直是返回false,但是在手机safari中是没有问题的。

综合解决方案

因此,可以如下写代码:if ((/iphone|ipod|ipad.*os 5/gi).test(navigator.appVersion)) {

window.onpageshow = function(event) {

if (event.persisted) {

window.location.reload()

}

};

}else{

οnlοad=function(){

var refreshedId=document.getElementById("refreshed");

if(refreshedId.value=="no"){

refreshedId.value="yes";

} else{

refreshedId.value="no";

location.reload();

}

}

}

通过上面代码发现在safari中第一次打开页面的时候,有时候会出现闪屏效果。

添加如下代码:$(window).bind("unload", function() { });

就没有再出现闪屏效果了。

通过iframe方式阻止缓存

页面中添加如下代码

this prevents back forward cache

这种方式有待验证。

通过时间戳强制刷新方式

下面代码是针对iPad中safari返回按钮问题var showLoadingBoxSetIntervalVar;

var showLoadingBoxCount = 0;

var showLoadingBoxLoadedTimestamp = 0

function showLoadingBox(text) {

var showLoadingBoxSetIntervalVar=self.setInterval(function(){showLoadingBoxIpadRelaod()},1000);

showLoadingBoxCount = 0

showLoadingBoxLoadedTimestamp = new Date().getTime();

//Here load the spinner

}

function showLoadingBoxIpadRelaod()

{

//计算时间超过500毫秒

var diffTime = ( (new Date().getTime()) - showLoadingBoxLoadedTimestamp - 500)/1000;

showLoadingBoxCount = showLoadingBoxCount + 1;

var isiPad = navigator.userAgent.match(/iPad/i) != null;

if(diffTime > showLoadingBoxCount && isiPad){

location.reload();

}

}

相信看了这些案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

相关阅读:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值