关于sessionStorage的移动端兼容问题
最近在开发移动端项目时,需要用到的本地存储的地方不少。都是一些只要记住当前打开窗口的用户数据就行,所以我选择用的sessionStorage。
使用场景如下:
A.html页面需要记录一条数据{a:1,b:2};
sessionStorage.setItem("data","{a:1,b:2}");
B.html页面取出使用;
sessionStorage.getItem("data"); // 获取结果为null
问题:
如果项目不是单页面复应用,AB是两个html文件,需要跳转href的。我们会发现有些Andiron系统的浏览器在B页获取是到的结果是null (如:vivo手机自带的世界之窗浏览器)。
原因:
经过分析,其实这并不是这个浏览器不支持sessionStorage,因为你还是能获取到sessionStorage这个对象的。
而是因为sessionStorage是一个当前窗口的数据存储格式,有些浏览器在跳转新页面的时候他系统是打开了一个新的webView,把原来的关了,也就相当于我们在浏览器打开了一个新窗口。
这样他就跟我们的sessionStorage原理冲突了,在新页面当然就获取不到咯。
所以建议大家做移动端的时候如果不是单页面复应用的的项目最好不要使用sessionStorage。慎用!
解决办法:(2019年了,哈哈!! 来补充下解决办法,有用的话支持下我哦^_^ ^_^ ^_^,下面的广告也是今天补的,不关注我的广告,给我点个赞也非常谢谢的!^_^)
利用localStorage,和window.name来实现:
window.name属性:页面刷新是不会被重置的
A.html页面
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
//这清除一定要在页头,如果是新进入的页面就清除上次传存储的值
if(window.name === ''){
localStorage.removeItem("aUser");
window.name = 'isReload';
} </script>
</head>
<body>
<script>
//设置值
localStorage.setItem("aUser","aaa");
</script>
</body>
</html>
B页面
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
//这清除一定要在页头,如果是新进入的页面就清除上次传存储的值
if(window.name === ''){
localStorage.removeItem("bUser");
window.name = 'isReload';
}
//判断如果A页面有存储,那就取出来过渡到B页面来
let a = localStorage.getItem('aUser');
if(a){
localStorage.setItem('bUser',a);
} </script>
</head>
<body>
<script>
//获取值
localStorage.getItem("bUser"); //aaa
</script>
</body>
</html>
关于sessionStorage的移动端兼容问题的更多相关文章
- 【移动端兼容问题研究】javascript事件机制详解(涉及移动兼容)
前言 这篇博客有点长,如果你是高手请您读一读,能对其中的一些误点提出来,以免我误人子弟,并且帮助我提高 如果你是javascript菜鸟,建议您好好读一读,真的理解下来会有不一样的收获 在下才疏学浅, ...
- ReactJs移动端兼容问题汇总
汽车H5使用ReactJs问题汇总 Q:安卓4.4webview显示空白? A:初步怀疑是css属性没有加前缀引发的兼容问题,但添加后发现也不行,通过webview调试后控制台输出Set is und ...
- 网页背景H5视频自动播放---PC端、移动端兼容问题完美解决方案(IOS、安卓、微信端)
最近公司官网需要使用视频当做banner背景且自动播放,并且因为是官网需要做到PC端和移动端都可以适配兼容,这些问题很是头疼: 兵来将挡,水来土掩,进过查阅相关技术资料,现已完美兼容PC端和移动端.下 ...
- vue e.path 移动端兼容
作用 e.path 用来获取点击元素及以上所有父元素的一个数组 问题 当在移动端会有获取不到e.path的问题 不兼容 解决 let path = event.path || (event.compo ...
- 移动端—— 兼容PC端,移动端的点击事件
移动设备上不支持鼠标事件,好在webkit内核的移动浏览器支持 touch 事件,所以触摸事件是移动应用中所必须的.touchstart.touchmove.touchend事件可以类比于moused ...
- 年度账单h5 移动端兼容问题以及优化建议(vue)
定时器 vue实例中定义timer多余,创建的定时器代码和销毁定时器的代码没有放在一起,通常很容易忘记去清理这个定时器,不容易维护:建议使用this.$once('hook:beforeDestory ...
- vue--移动端兼容问题
click的300ms延迟: 引入fastclick库来解决 输入命令 npm install fastclick 在main.js导入 import Vue from 'vue' import Ap ...
- 移动端兼容 - faskclick.js
fasckclick为解决移动端300ms延迟而生 github地址为:https://github.com/ftlabs/fastclick 使用方法: 1. 原生使用(window.onload或 ...
- pc端兼容IE9及以上版本
最近业务部门反映我们商城的兼容性不是很好,尤其是在IE浏览器上,经过调研,我们决定对IE9及以上版本的IE内核浏览器进行主流程测试,发现有哪些功能在IE9上不兼容 一.CSS兼容性 如下图所示 使用了 ...
随机推荐
- D. Powerful array
D. Powerful array 题意 给定一个数列:a[i] (1<= i <= n) K[j]表示 在区间 [l,r]中j出现的次数.有t个查询,每个查询l,r,对区间内所有a[i] ...
- Java之进程与线程练习
1.设计一个线程类:创建3个子线程,每个线程分别打印数字,分别睡眠100,200,300ms ->每个执行都是20次 代码: package Homework; //1.设计一个线程类:创建3个 ...
- C语言到C++(1) - 基本变化
说到C++和C语言的区别,大部分人都会想到面向对象和面向过程.然而这种说法并不准确.面向对象和面向过程指的是两种不同的程序设计思想,而C++与C是两种编程语言,难道C++就不能用于面向过程去解决问题吗 ...
- 2017年Web前端开发工程师薪资越来越高?
放眼全球,不仅在国内的互联网行业,在国外,前端工程师一样是需求旺盛.供不应求的香饽饽.所以在供不应求的前端招聘市场上,优秀的前端工程师才是有话语权的那一方. 前端开发是做什么的? 前端是互联网时代软件 ...
- C# ftp 图片上传多快好省
前言 此篇讲到的是图片上传功能,每个网站必定会有这样类似的功能,上传文件.上传图片等等.那么接下来,看看我们EF+uploadfile+ftp如何玩转上传图片吧 效果预览 具体实现 一个简单数据库 只 ...
- Java基础——抽象类和接口
之所以将抽象类和接口放在一起做笔记,是因为他们之间很难区分又各自独立.在学习完Java程序设计的三大特点(封装.继承.多态)之后,我最大的收获是,慢慢理解了Java语言这种面向对象程序设计的优越性,它 ...
- 20+行代码使用es5 Object.defineProperty 实现简单的watch功能
/** * 一个简单的demo 帮助理解defineProperty,只对Object类型参数有效 */ $watch=function(myObject,callback){ function in ...
- nginx之 nginx + tomcat + redis 负载均衡且session一致性
说明: 本文描述的是 nginx + tomcat + redis 实现应用负载均衡且满足session一致性,从安装到配置的全部过程,供大家学习!nginx 代理服务器ip: 10.219.24.2 ...
- Thinkphp中的内置标签用法
Thinkphp中的内置标签有:Volist,Foreach,For,Switch,比较标签,范围判断标签,IF,Present,Empty,Defined,Assign,Define,标签嵌套,im ...
- phpcms v9 调用自定义字段多图片的第一张或第N张图为缩略图
1.打开相应要使用组图的模型的组图字段,添加组图 字段提示为 <div class="content_attr"> <label><input typ ...