A-A+

onbeforeunload在手机Safari上不执行?

2016年09月19日 JavaScript 暂无评论 阅读 659 次

今天碰到一个问题,ios下Safari获取不到lcoalstorage缓存问题,经过排除后,确实onbeforeunload不执行.解决方法如下:

window.addEventListener("pagehide", function(){
    updateMenusIndex2();//Ajax请求
    setTimeout(function(){},1000);
}, false);

二:safari的隐身模式对localstorage页也有影响

提示关闭代码

<!DOCTYPE html>
<html lang="en-US">
<head>
    <title>判断浏览器是否支持localStorage</title>
    <meta charset="UTF-8" />
</head>

<body>
<script>
    function isLocalStorage() {
        var testKey = 'test',
                storage = window.localStorage;
        try {
            storage.setItem(testKey, 'testValue');
            storage.removeItem(testKey);
            return true;
        } catch (error) {
            return false;
        }
    }

    if(isLocalStorage()){
        localStorage.test = "支持";
    }

    var test;

    if(window.localStorage){
        if(localStorage.test){
            test = localStorage.test;
        }
        else{
            test = "不支持";
        }
    }

    alert(test);
</script>
</body>
</html>

场景

项目中某部分代码有用到localStorage储存数据,该部分代码在线上一直正常跑着。 直到前几天突然有用户反馈有个页面在他iPad safari上显示不正常,遂用iPad一整调试后找到原因。

原因

ios上safari开启隐身模式时,localStorage无法写入新的内容,并且会抛出异常导致js无法正常执行,最终页面无法正常加载。

解决

使用try catch包裹对localStorage写入的代码:

try {
    window.localStorage.foobar = "foobar";
} catch(_) {
    alert("本地储存写入错误,若为safari浏览器请关闭隐身模式浏览。");
}

ps: 【小贴士】【stringify神BUG】【localstorage失效】【消灭Safari alert框】【是否延迟加载】【页面10px白屏】 http://www.cnblogs.com/yexiaochai/p/3858994.html

 

标签:

给我留言

Copyright © web前端技术开发个人博客 保留所有权利  京ICP备14060653号 Theme  Ality

用户登录