前言
  前阶段,测试提了个bug,在苹果手机中无痕模式下,搜索按钮不好使,无法跳页,同时搜索历史也没有展示(用户搜索历史时使用localStorage存储)。
正文
  iOS上Sarfari在无痕模式下,浏览器假装支持localStorage,并在全局window上暴漏了该方法,所以校验是有localStorage对象的,但是调用setItem进行保存的时候,就报Error: QuotaExceededError ... : The quota has been exceeded.
 
因此,进行了个小测试......,可能测试不够全面!
1.测试机型
  iPhone7 Plus  版本 11.3
  iPhone6 Plus  版本 11.3.1
  iPhone6     版本 10.2.1
  iPhoneSE        版本 9
  oppe r9
2.测试浏览器
  Sarfari    UC    自带浏览器
 
3.结果:
  iOS9,iOS10    Sarfari
    setItem 报错
    getItem null
  iOS 11    Sarfari
    setItem  可set
    getItem  可get
  iOS 11    UC
    setItem  不可set,但不报错
    getItem  null
  安卓机
    可set,可get
 
4.结论:
  只有iOS9、10还存在无痕浏览下localStorage无法使用的情况,iOS11中Sarfari已支持存取localStorage,但是iOS11中UC不支持存localStorage。
所以,在开发过程中使用loaclStorage就需要对以上情况进行兼容,避免 js 报错后影响整个页面的功能。
 
5.解决代码及注意要点:
  1.使用try/catch
  2.只针对setItem,进行判断“浏览器是否开启无痕模式”
//判断浏览是否支持localStorage
function isLocalStorageSupport{
try {
var isSupport = 'localStorage' in window && window['localStorage'] !== null;
if (isSupport) {
localStorage.setItem("local_storage_test", "1");
localStorage.removeItem("local_storage_test");
}
return isSupport;
} catch (e) {
return false;
}
}
//判断浏览器是否开启无痕模式
function isInPrivate(){
try {
localStorage.setItem("local_storage_test", "1");
localStorage.removeItem("local_storage_test");
return false;
} catch(e){
return true;
}
}

  

ios中safari无痕浏览模式下,localStorage的支持情况的更多相关文章

  1. MUI - myStorage在ios safari无痕浏览模式下的解决方案

    myStorage在ios safari无痕浏览模式下的解决方案 今天看到了这个帖子LocalStorage 在 Private Browsing 下的一个限制, 吓尿了,如果用户开启了无痕浏览,ap ...

  2. 苹果手机Safari无痕浏览模式下系统登录成功但是页面不跳转

    昨天下午,测试提了一个bug,问题是:在苹果手机Safari无痕浏览模式下系统登录成功但是页面不跳转. 思前想后找了半天没思路,后来经过同事的点拨,说可能是禁用了cookie之类的,反正我也没思路就顺 ...

  3. Safari Private 模式下 localStorage 的问题

    现如今好多浏览器都有「隐身模式」,Safari 管这叫「Private Browing」,国内各种牌子的套壳浏览器叫「无痕浏览」.私以为从命名上来说,倒是国内更中文一些. 这种模式下浏览网页踏雪无痕, ...

  4. 一次由于开启 Safari 无痕浏览 引发的艰难“捉虫”事件

    事件回顾 做了一个移动端的页面,测试的时候出现了一个诡异的 bug.别的浏览器都好好的,就 ios 的 Safari 浏览器页面停止了渲染,似乎是有一段 js 文件没有载入.但是奇怪的是,同一型号的 ...

  5. 利用iOS中Safari浏览器创建伪Web App

    在safari浏览器里有一个“添加到主屏幕”选项,我们可以用来创建伪Web App,下面来了解一下iOS中Safari的私有属性 第一步设置Web App的主屏幕图标: 有两种属性值apple-tou ...

  6. 将iOS中Safari 的默认搜索引擎由google.cn改为google.com的方法

    众所周知虽然Google大部分的业务已经迁出中国大陆,访问Google的中国站点只会出现一个投影网站,但是很长一段时间里如果想要访问Google仍然能跳转到google.com.hk这个香港的节点,这 ...

  7. OS X 和iOS 中的多线程技术(下)

    OS X 和iOS 中的多线程技术(下) 上篇文章中介绍了 pthread 和 NSThread 两种多线程的方式,本文将继续介绍 GCD 和 NSOperation 这两种方式.. 1.GCD 1. ...

  8. 浏览器对localstorage的支持情况以及localstorage在saas系统中的应用实践思考

    首先,还是要说,任何一种新特性的引入,通常有着其特有的场景和解决的目标需求,localstorage也一样.在我们的应用场景中,主要在金融业务服务的saas系统.其中涉及很多更改频率很多的元数据的客户 ...

  9. iOS中Safari浏览器select下拉列表文字太长被截断的处理方法

    网页中的select下拉列表,文字太长的话在iOS的Safari浏览器里会被自动截断,显示成下面这种: 安卓版的浏览器则没有这个问题. 如何让下拉列表中的文字在iOS的Safari浏览器里显示完整呢? ...

随机推荐

  1. 洛谷P3957 跳房子(Noip2017普及组 T4)

    今天我们的考试就考到了这道题,在考场上就压根没有思路,我知道它是一道dp的题,但因为太弱还是写不出来. 下来评讲的时候知道了一些思路,是dp加上二分查找的方式,还能够用单调队列优化. 但看了网上的许多 ...

  2. 面试题(一GC)

    参考https://blog.csdn.net/m0_38110132/article/details/74542143 6.详谈一下Java内存模型以及GC算法: (1). jvm结构 JVM的内部 ...

  3. springboot jpa 复合主键

    https://blog.csdn.net/wyc_cs/article/details/9031991 创建一个复合主键类 public class LevelPostMultiKeysClass ...

  4. Lodop打印控件在页面如何使用

    Lodop打印控件部署到web服务器简单,在页面的使用方法也简单,是非常容易和方便使用的打印控件.客户端本地打印角色(即用户访问网站后 用自己链接的打印机进行客户端本地打印),步骤很少,部署简单:Lo ...

  5. Lodop打印表格带页头页尾 自动分页每页显示头尾

    Lodop中有两种专门给超文本表格的方式,ADD_PRINT_TABLE和ADD_PRINT_TBURL,该方式只能用于单个表格,表格外的内容不显示,是专门用于打印html超文本表格的.使用这两个语句 ...

  6. MySQL字符串进行加减乘除的运算

    原文链接:https://www.jianshu.com/p/2ab2c0dc3cb5 在mysql当中,字符串类型间进行加减乘除运算的时候,会截取字符串以数字开头的那一部分数字进行运算,如果字符串前 ...

  7. 清北学堂part1

    睡眠质量相当高的一天(滑稽) 整一整都学了啥 1:高精度(相当水,毕竟学过) 2:模运算(?! 这还要讲?) 3:快速幂(还要谢一位学习高数时间为我们讲解的同学...不得不说真的有效,快速幂已经是随手 ...

  8. Flask 框架介绍

    FLASK 框架 框架介绍 简单来说: 小 扩展性极强 官方文档 点这里 Flask 和 Django 的区别 Django 无socke,依赖第三方模块wsgi 路由系统(CBV,FBV) 中间件, ...

  9. Mac spotlight无法搜索的解决方法

    出现问题: 1. 在打开spotlight快速搜索的时候输入两个字符,后该搜索框自动会消失,很是奇怪重启等操作也没有效果 问题原因: 可能因为之前因为耗电原因关闭的全局搜索的索引,或者由于索引出现错误 ...

  10. centos安装node环境

    一.安装wget yum install -y wget 二.下载node最新的安装包 wget https://nodejs.org/dist/v10.13.0/node-v10.13.0-linu ...