javascript的onbeforeunload函数在IOS上运行

今天在做项目的时候,组长让我用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);    } */    }
时间: 2024-10-29 10:33:37

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

深度学习之在iOS上运行CNN

1 引言 作为曾经的iOS开发者,在研究深度学习的时候,总有一个想法就是在iPhone上运行深度学习,不管是在手机上训练还是利用训练好的数据进行测试. 因为iOS的开发环境支持C++,因此,只要你的代码是C/C++,本质上就可以在iOS上运行. 怎么才能更快更好地在iOS上运行CNN呢? 2 方法1:通过Matlab转码 Matlab自带转成c的工具,如果你研究过UFLDL的深度学习教程,就知道如何在Matlab上使用CNN,那么,转换成c后,放到iOS的开发环境中,然后将参数存成txt格式再读

深度学习之Matlab 转C++在iOS上测试CNN手型识别

1 前言 在上一篇Blog,我介绍了在iOS上运行CNN的一些方法.但是,一般来说,我们需要一个性能强劲的机器来跑CNN,我们只不过需要将得到的结果用于移动端.之前在Matlab使用UFLDL的代码修改后跑了手型识别的3层CNN,这里我们就考虑将Matlab转C之后移植到xcode中. Step 1:Matlab 转c 首先要保证代码可以跑,可以运行,比如我这边,如下测试cnn识别手型: >> parameters = load('./opt_parameters/opttheta_8epoc

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

2007 年 W3C (万维网联盟)立项 HTML5,直至 2014 年 10 月底,这个长达八年的规范终于正式封稿. 过去这些年,HTML5 颠覆了 PC 互联网的格局,优化了移动互联网的体验,接下来,HTML5 将颠覆原生 App 世界.这听起来有点危言耸听,但若认真分析 HTML5 的发展史,你会发现,这个世界的发展趋势确实就是这样. 熟知历史才能预知未来,先让我们来看看 HTML5 为什么诞生.这 8 年是怎么过来的. 一. HTML5 的诞生 自 W3C 于 1999 年发布 HTML

iOS开发:在多平台、设备及64位架构上运行

最近在新工程上线是遇到很多适配的问题,尤其是旧工程64位设备的适配,现在整理一下. Base SDK vs. Deplyment Target 1.配置Base SDK设置 1)选择工程导航面板上的工程文件 2)编辑面板上搜索base sdk Base SDK设置引导编译器使用该版本的SDK编译和构建应用,也就是说,它会直接控制应用使用哪些API. 2.Deplyment Target运行应用需要的最低操作系统版本 支持多个SDK时的注意事项: 框架的可用性有时新的SDK会增加一个完整框架,较早

在思科IOS XR上运行中间系统到中间系统协议

第4章 核心路由协议IS-ISIS-IS(Intermediate System-to-Intermediate System),即中间系统到中间系统,是为ISO无连接网络协议(ISO's connectionless network protocol , CLNP)设计的路由选择协议.ISIS协议的时间和OSPF发布的时间基本同一时期,稍早或者稍迟一点.其本意是支持从TCP/IP协议栈向OSI的转换,但是前者却成为了实际的工业标准,而ISIS现在更多的作为服务应用商网络的IGP的层面.它是IS

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

[问题现象] 1.把 APACHE 的 ZIP 包解压到目录,比如 d:\apache24\ 2.把 PHP 的 ZIP 包解压到目录,比如:d:\php56\ apache 与 php 与 MySQL 的参数配置,网上可以搜罗一大筐,可自行google.bing.百度. 这里主要说一个问题,如果在php中使用 curl_init() 函数,网页上一直提示:Fatal error: Call to undefined function curl_init(), 那么直接把 d:\php56 添加

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

现在Xcode7可以用一个appleid就可以往手机上部署测试app,不再需要$99,这也是方便.但是要把app发给别人的手机上运行还是不行,除非别人的手机在你身边可以直接通过Xcode安装 关于怎么打包可以看以下这篇文章 xcode7.x 免证书生产IPA打包文件 主要说说我碰到的问题 设备: iphone6 系统:ios9.3.3 目前最新 状态:已越狱 在文章里提到在Build Settings下面修改Code Signing Identify为Don’t Code Sign,我修改了之后

JavaScript中的函数表达式

在JavaScript中,函数是个非常重要的对象,函数通常有三种表现形式:函数声明,函数表达式和函数构造器创建的函数. 本文中主要看看函数表达式及其相关的知识点. 函数表达式 首先,看看函数表达式的表现形式,函数表达式(Function Expression, FE)有下面四个特点: 在代码中须出现在表达式的位置 有可选的函数名称 不会影响变量对象(VO) 在代码执行阶段创建 下面就通过一些例子来看看函数表达式的这四个特点. FE特点分析 例子一:在下面代码中,"add"是一个函数对象

JavaScript权威指南 - 函数

函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对于其他面向对象语言,在JavaScript中的函数是特殊的,函数即是对象.JavaScript可以把函数赋值给变量,或者作为参数传递给其他函数,甚至可以给它们设置属性等. JavaScript的函数可以嵌套在其他函数中定义,这样定义的函数就可以访问它们外层函数中的任何变量.这也就是所谓的"闭包&qu