今天在做项目的时候,组长让我用iPad测试一下前面写的离线缓存,后退不刷新页面,发现在iPad上onbeforeunload函数在iPad上一带而过,不运行???

无奈之下,发现原来在IOS上,有自己的onshow和onhide方法  //搜索来自:http://www.cnblogs.com/vaal-water/archive/2012/09/25/2701769.html

原文如下:

 window.addEventListener("pageshow", myLoadHandler, false);
window.addEventListener("pagehide", myUnloadHandler, false);
    function myLoadHandler(evt)
{
if (evt.persisted) {
// This is actually a pageshow event and the page is coming out of the Page Cache.
// Make sure to not perform the "one-time work" that we'd normally do in the onload handler.
... return;
} // This is either a load event for older browsers,
// or a pageshow event for the initial load in supported browsers.
// It's safe to do everything my old load event handler did here.
...
} function myUnloadHandler(evt)
{
if (evt.persisted) {
// This is actually a pagehide event and the page is going into the Page Cache.
// Make sure that we don't do any destructive work, or work that shouldn't be duplicated.
... return;
} // This is either an unload event for older browsers,
// or a pagehide event for page tear-down in supported browsers.
// It's safe to do everything my old unload event handler did here.
...
} if ("onpagehide" in window) {
window.addEventListener("pageshow", myLoadHandler, false);
window.addEventListener("pagehide", myUnloadHandler, false);
} else {
window.addEventListener("load", myLoadHandler, false);
window.addEventListener("unload", myUnloadHandler, false);
}
原文 http://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/ 我自己的程序如下:
先写了一个判断是不是IOS系统的方法:
function isIOS() {
    var userAgentInfo = navigator.userAgent;
    var Agents = [ "iPhone","iPad"];
    var flag = false;
    for (var v = 0; v < Agents.length; v++) {
        if (userAgentInfo.indexOf(Agents[v]) > 0) {
            flag = true;
            break;
        }
    }
    return flag;
}
等于这个:
var nav = window.navigator.userAgent.toLowerCase();
var ipad = nav.indexOf("ipad"); 我的理解是:
当页面加载完的时候给window加载监听器
 window.addEventListener("pagehide", myUnloadHandler, false);
 window.addEventListener("pageshow", myLoadHandler, false); 系统自动识别是不是IOS系统,然后做出处理
if(!parent.isIOS()){} //或者是if(ipad != -1){} 当IOS系统加载的时候,执行myloadHandler函数(相当于js的onload函数),当离开页面的时候执行myUnloadHandler函数(相当于js的onbeforeunload函数),
然后在myloadHandler函数中做出你要执行的加载页面时触发的事件,在myUnloadHandler函数中做出你要离开页面时触发的事件 全部代码以及冗余代码如下:没有删减
var nav = window.navigator.userAgent.toLowerCase();
alert(nav);
var ipad = nav.indexOf("ipad");
alert(parent.isIOS());
if(!parent.isIOS()){
    alert("ipad");
    alert("SUCCESS");
 window.addEventListener("pagehide", myUnloadHandler, false);
 /* window.addEventListener("pageshow", myLoadHandler, false);
    function myLoadHandler(evt)
    {
        alert("myLoadHandler");
        start = parseInt(sessionStorage.getItem("start"+token));
        paramFlag = sessionStorage.getItem("paramFlag"+token);
        tokenDiv = sessionStorage.getItem("tokenDiv"+token);
        //$("#tokenDiv").html(tokenDiv);   由于放在sessionstorage中的div的id都一样,故吧时间戳作为唯一标识ID
        $("#tokenDiv").html(tokenDiv);
    } */     function myUnloadHandler(evt)
    {
        alert("myUnloadHandler");
        alert("离开页面了");
    var tokenDiv = $("#tokenDiv").html();
    sessionStorage.setItem("tokenDiv"+token,tokenDiv);
    sessionStorage.setItem("start"+token,start);
    sessionStorage.setItem("paramFlag"+token,paramFlag);
    }
}
window.onbeforeunload = function(){
    
    alert("离开页面了");
    var tokenDiv = $("#tokenDiv").html();
    sessionStorage.setItem("tokenDiv"+token,tokenDiv);
    sessionStorage.setItem("start"+token,start);
    sessionStorage.setItem("paramFlag"+token,paramFlag);
   /*  if ("onpagehide" in window) {
        alert("one");
        window.addEventListener("pageshow", myLoadHandler, false);
        window.addEventListener("pagehide", myUnloadHandler, false);
    } else {
        alert("two");
        window.addEventListener("load", myLoadHandler, false);
        window.addEventListener("unload", myUnloadHandler, false);
    } */
    }

javascript的onbeforeunload函数在IOS上运行的更多相关文章

  1. ios那些事之如何在ios5上运行gdb

    为啥要在ios上运行gdb? 这个问题见仁见智喽.对于搞开发的同学们来所, 有了gdb更方便跟踪分析别人的程序,取长补短:)这里不是教大家crack:) 运行环境: Mac OS 10.7.4 Xco ...

  2. react native-调用react-native-fs插件时,如果数据的接口是需要验证信息的,在android上运行报错

    调用react-native-fs插件时,如果数据的接口是需要验证信息的,在android上运行报错,而在iOS上运行没问题.原因是因为接口是有验证信息的,而调用这个插件时没有传入,在iOS上会自动加 ...

  3. HTML5定稿了,终于有一种编程语言开发的程序可以在Android和IOS两种设备上运行了

    2007 年 W3C (万维网联盟)立项 HTML5,直至 2014 年 10 月底,这个长达八年的规范终于正式封稿. 过去这些年,HTML5 颠覆了 PC 互联网的格局,优化了移动互联网的体验,接下 ...

  4. 将 java 项目打包成可运行的 jar 包(main 函数带参数),并上传到 linux 服务器上运行

    一.概述 java项目有两种架构,一种是 B/S 架构的,一种是 C/S 架构的. 对于 B/S 架构来说,我们常见的 java ee 即是 B/S 架构,通常,开发人员会在本地进行开发,然后将项目打 ...

  5. ios:如何将自己编写的软件放到真正的iPhone上运行(转)

    想要将自己编写的软件放到真正的iPhone上去运行,首先你需要成为Apple Developer计划的成员.其次,你需要设置程序ID和认证书,在这之后你就可以在你指定的iPhone上运行你的程序了.下 ...

  6. win10 上运行 curl_init() 函数一直报错的解决办法

    [问题现象] 1.把 APACHE 的 ZIP 包解压到目录,比如 d:\apache24\ 2.把 PHP 的 ZIP 包解压到目录,比如:d:\php56\ apache 与 php 与 MySQ ...

  7. iOS开发手记 - iOS9.3 Xcode7打包ipa文件在其他越狱机器上运行的方法和一些问题

    现在Xcode7可以用一个appleid就可以往手机上部署测试app,不再需要$99,这也是方便.但是要把app发给别人的手机上运行还是不行,除非别人的手机在你身边可以直接通过Xcode安装 关于怎么 ...

  8. 微坑---微信小程序ios上时间字符串转换为时间戳时,在开发工具上和安卓手机上运行成功

    给定一个时间字符串  var time="2017-02-27 16:42:53" js有三种转换为时间戳的方法:1.var timestamp = Date.parse(time ...

  9. 微信小程序ios上时间字符串转换为时间戳时会报错,在开发工具上和安卓手机上运行成功

    给定一个时间字符串  var time="2017-02-27 16:42:53" js有三种转换为时间戳的方法: 1.var timestamp = Date.parse(tim ...

随机推荐

  1. oracle使用存储过程实现日志记录.sql

    --这段sql语句是用来实现oracle后台记录操作日志的,代替或者补充应用系统的操作日志. --1.对应的日志记录表----------------------------------------- ...

  2. BZOJ-1002 轮状病毒 高精度加减+Kirchhoff矩阵数定理+递推

    1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3543 Solved: 1953 [Submit][Statu ...

  3. BZOJ4590 自动刷题机

    Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机--一种可以自动AC题目的神秘装置.自动 刷题机刷题的方式非常简单:首先会瞬间得出题目的正确做法,然后开始写 ...

  4. HDU 4901 The Romantic Hero

    The Romantic Hero Time Limit: 3000MS   Memory Limit: 131072KB   64bit IO Format: %I64d & %I64u D ...

  5. jQuery EasyUI API 中文文档

    http://www.cnblogs.com/Philoo/tag/jQuery/ 共2页: 1 2 下一页  jQuery EasyUI API 中文文档 - 树表格(TreeGrid) 风流涕淌 ...

  6. Java Socket发送与接收HTTP消息简单实现

    在上次Java Socket现实简单的HTTP服务我 们实现了简单的HTTP服务,它可以用来模拟HTTP服务,用它可以截获HTTP请求的原始码流,让我们很清楚的了解到我们向服务发的HTTP消息的结 构 ...

  7. oracle经典书籍推荐 转

    很多网友询问如何选择入门书籍,学Oracle有什么好书,这里给出一些常见书籍的介 绍.首先声明,本文只涉及国外作品,因为国内的作品好的极少,大多是拼凑之作. 提到入门学习,我又得搬Tom(Thomas ...

  8. 2000多万个微信号被封全面禁止"集赞" 微信雷霆行动这次玩真的

    微信雷霆行动自年初启动了打击网络黑色产业链以来,微信累计封停了2000万个招嫖账号,3万个假货公众账号,切实保护用户利益.你曾经中过招吗?Yes or No?说说你的看法吧. 同时,微信从9日起开始升 ...

  9. RootKit学习之 IDT Hook

    0x00 前言  IDT(Interrupt Descriptor Table)中断描述符表,中断就是停下现在的活动,去完成新的任务.一个中断可以起源于软件或硬件.比如,出现页错误,调用IDT中的0x ...

  10. 第14章 使用DHCP动态管理主机地址

    章节简述: DHCP协议服务能够自动化的管理局域网内的主机IP地址,有效的提升IP地址使用率,提高配置效率,减少管理与维护成本. 学习dhcpd服务程序的使用方法并逐条讲解配置参数,完整演示自动化分配 ...