移动端浏览器隐私模式/无痕模式使用本地存储localStorage/sessionStorage的问题 开发H5 webapp时经常需要使用本地存储,如localStorage和sessionStorage存储一些数据,相比最多能存4k的cookie相比,用起来很好用.但是localStorage在iOS Safari.chrome和UC浏览器中的隐私模式(也叫无痕模式)下无法使用,手机Safari浏览器中具体表现是: localStorage对象仍然存在 但是setItem会报异常:Quota…
1.需求背景:当用户在页面上添加一行一行的数据时,突然发现网络断掉了,页面上编辑的数据没法保存进数据库,所以需要一个本地端的临时保存功能,以便在网络通畅后重新加载出来! 2.解决方案: 结合网上搜刮,考虑到了这几种方式:1)采用cookie; 2)看能不能采用浏览器的页面缓存来模拟 3)使用html5 1)cookie使用(做测试是直接用浏览器打开没有效果,需要放到站点下) 所有浏览器都支持,所以不需要去考虑兼容性的问题; 浏览器对于同一domain最多支持20个左右cookie,每个cooki…
1. Chrome73 新增加了暗黑模式 可以通过修改快捷方式的方式来默认开启方法如下 1.1 关闭浏览器 2.2 鼠标焦点定位到任务栏 Chrome 图标处, 并且按住shift 按键 执行右键操作 1.3 选择属性 打开界面为: 1.4 在目标内添加就可以增加相应的功能 1. 添加自定义的数据目录 --user-data-dir="E:\Chrome\chrome" 2. 开启暗黑模式 --enable-features=WebUIDarkMode --force-dark-mod…
无痕模式是黑色风格,正常模式是白色风格.在无痕模式中,使用localStorage.setItem()会报错,但在window对象下确实有localStorage.setItem方法. if (typeof localStorage === 'object') { try { localStorage.setItem('localStorage', 1); localStorage.removeItem('localStorage'); } catch (e) { Storage.prototy…
前言 Safari开启无痕模式后,localStorage和sessionStorage为空,对其进行set操作也会报错,也就是说这种情况下,storage是被禁止使用了.接下来说一下解决方法. 解决方案 我们项目框架上的解决方法是对storage进行一层封装,遇到这种开启无痕模式的情况,会定义一个window的全局变量,把之前准备存放到storage的内容改为存到这个全局变量中. 注意,无痕模式下localStorage和sessionStorage对象本身依然是存在的,只是调用setItem…
safari 无痕浏览情况测试(部分手机)   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 getIte…
我们的一个小应用,用localStorage做了下缓存,测试上线之后有反馈页面数据拉取不到, 最后定位到是localStorage有问题. 是Private Browsing Mode引起的.然后查看IOS的safari没有发现隐私设置什么的 后来点击右下角小框框发现有个无痕浏览的模式.MD,关闭后一切正常 // Safari, in Private Browsing Mode, looks like it supports localStorage but all calls to setIt…
对端边缘云网络计算模式:透明计算.移动边缘计算.雾计算和Cloudlet 概要 将数据发送到云端进行分析是过去几十年的一个突出趋势,推动了云计算成为主流计算范式.然而,物联网时代设备数量和数据流量的急剧增加,给容量有限的互联网和不可控的服务延迟带来了巨大的负担.单独使用云计算很难满足物联网应用对延迟敏感和上下文感知的服务需求.面对这些挑战,计算范式正在从集中式云计算转向分布式边缘计算.一些新的计算模式,包括透明计算.移动边缘计算.Fog计算和Cloudlet,已经出现,以利用网络边缘的分布式资源…
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>设置浏览器使用的dom模式为IE7IE=EmulateIE8 IE8 IE=EmulateIE9 IE9 IE=edge 使用最新版本…
关于渲染模式: 在多年以前(IE6诞生以前),各浏览器都处于各自比较封闭的发展中(基本没有兼容性可谈).随着WEB的发展,兼容性问题的解决越来 越显得迫切,随即,各浏览器厂商发布了按照标准模式(遵循各厂商制定的统一标准)工作的浏览器,比如IE6就是其中之一.但是考虑到以 前建设的网站并不支持标准模式,所以各浏览器在加入标准模式的同时也保留了混杂模式(即以前那种未按照统一标准工作的模式,也叫怪 异模式).经过多年的发展,后来又出现了近似标准模式(在一种模式中同时融入标准模式和部分混杂模式的特性,也…
网上大部分的文章写隐身模式下 localStorage 对象不可用,直接以 localStorage 能否写入来判断浏览器是否处于隐身模式其实是错的,在隐身模式下localStorage也是能使用的,但这时候它会有sessionStorage一样,当用户关闭标签栏时就会被清除 http://htmlui.com/blog/2011-08-23-5-obscure-facts-about-html5-localstorage.html 正确的判断方法: 在隐身模式下真正不能用的是 FileSyst…
关键字: javascript.quirks mode.strict mode 在看js代码时,有时会看到关于quirks mode(怪异模式)和strict mode(严格格式)的东西,一直也没深究怎么回事,只是零零碎碎的有些概念,最近终于受不了这种似懂非懂的感觉,决定好好学习总结一下. 1.quirks mode和strict mode是浏览器解析css的两种模式,或者可以称之为解析方法.目前正在使用的浏览器这两种模式都支持 . 2.历史原因. 当早期的浏览器Netscape 4和Explo…
在无痕模式下,存的this.StorageManager.setItem("recharge", JSON.stringify(recharge))本地存储会丢失,所以我们改成使用url传参window.open("./?from=ins#/rechargeUrl?data="+encodeURIComponent (JSON.stringify(recharge)));this.recharge = JSON.parse(this.$route.query.dat…
browser = {             /**              * @property {boolean} ie 检测当前浏览器是否为IE              */             ie        :  /(msie\s|trident.*rv:)([\w.]+)/.test(agent),               /**              * @property {boolean} opera 检测当前浏览器是否为Opera           …
一:LVS介绍 二.LVS的NAT和DR模式的实验及配置步骤 一.LVS的简单介绍 linux virtual server 简单来讲lvs是一段内核代码 类似于netfilter本身是一框架但不提供任何功能,但是在这框架上提供了能够根据用户定义的转发规则将用户对于服务应用的请求转发至后端主机的机制,类似于DNAT 但DNAT只是其提供的一种工作模式 LVS的工作模式 lvs是工作在内核中的第四层(TCP/UDP)层 能够处理用户请求的套接字,而后只判定用户是否访问了定义为集群服务的应用 在lv…
前言 RabbitMQ六种队列模式-简单队列RabbitMQ六种队列模式-工作队列 [本文]RabbitMQ六种队列模式-发布订阅RabbitMQ六种队列模式-路由模式RabbitMQ六种队列模式-主题模式 上文我们了解了 RabbitMQ 六种队列模式中的简单队列,代码也是非常的简单,比较容易理解. 但是简单队列有个缺点,简单队列是一一对应的关系,即点对点,一个生产者对应一个消费者,按照这个逻辑,如果我们有一些比较耗时的任务,也就意味着需要大量的时间才能处理完毕,显然简单队列模式并不能满足我们…
在上位机和下位机或者服务端和客户端通信的时候,很多时候可能为了赶项目进度或者写代码方便直接使用Socket通信,传输string类型的关键字驱动对应的事件,这就有可能导致程序中存在大量的Switch-Case.If-Else判断.当通信的逻辑越来越复杂,增加的关键字就越来越多,导致一个事件处理类中不断的累加成千上万的Switch-Case.If-Else代码,导致后期的代码极其难以维护. 当大家在看到大量的Switch-Case.If-Else代码堆积在一起肯定会感觉非常的头痛,其中的业务逻辑就…
查看thinkphp版本号方法 打开文件“根目录\ThinkPHP\ThinkPHP.php”下的文件ThinkPHP.php,在22--23行可以看到版本信息THINK_VERSION,如下图: 说明:此方法不破坏原有的Thinkphp框架,对以后框架升级没影响,并且可以共用前台的model和controller,减少代码的繁琐重复: 第一步:新建 ismobile() 函数文件function.php,加入到目录“根目录\Application\Home\Common\”下 function…
阻止pc端浏览器缩放js代码 众所周知:移动端页面禁止用户缩放界面只需加上<meta name="viewport" content="user-scalable=0">即可,但是pc端确实比较麻烦,用户可以通过如下几种方式来缩放: windows: ctrl + +/- ctrl + 滚轮 浏览器菜单栏 mac: cammond + +/- 浏览器菜单栏 由于浏览器菜单栏属于系统软件权限,没发控制,我们着手解决ctrl/cammond + +/- 或…
组合模式/composite模式/对象结构型 意图 将对象组合成树形结构以表示"整体--部分"的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 动机 Composite模式,关键是一个抽象类(组件),既可以代表对象(叶子节点),又可以代表组合(中间节点).使用组合模式,我们能把相同的操作应用到组合和个别对象上. 通过让组件包含管理子节点和叶节点的操作,换取了对客户的透明性. 透明性和安全性的抉择 组合模式,使得用户对叶子节点和中间节点一视同仁,但是用户可以叶…
连接ORACLE服务器一般有两种方式:专用服务器连接(dedicated server)和共享服务器连接(shared server).那么两者有啥区别和不同呢?下面我们将对这两者的区别与不同一一剖析. 专用服务器模式(dedicated server)模式 在专用服务器模式中,用户进程运行在客户端的机器上,专用服务器进程运行在数据库服务器,用户进程和专用服务器进程是两种不同类型的进程. 对于专用服务器模式,在用户登录时,ORACLE总会创建一个新的服务进程,这通常称为专用服务器配置.这个服务器…
一般禁止body滚动的做法就是设置overflow:hidden. 但是很奇怪的发现在移动端浏览器和微信浏览器上这个不起作用,然后我分析了我的写法,就是在body上加了一个class去定义属性,然后改成标签的定位,如body{overflow:hidden;},这个实现是可以的,没有滚动条. 再进一步分析,如果要用class去实现没有滚动条,如下代码设置: .index_body { overflow-y: hidden;/*为了兼容普通PC的浏览器*/ height: 100%; positi…
android线程池的理解,晚上在家无事 预习了一下android异步加载的例子,也学习到了一个很重要的东东 那就是线程池+缓存  下面看他们的理解.[size=1.8em]Handler+Runnable模式 我们先看一个并不是异步线程加载的例子,使用 Handler+Runnable模式. 这里为何不是新开线程的原因请参看这篇文章:Android Runnable 运行在那个线程 这里的代码其实是在UI 主线程中下载图片的,而不是新开线程. 我们运行下面代码时,会发现他其实是阻塞了整个界面的…
1. 策略模式 策略模式定义一系列的算法,把它们封装起来,并且可以互相替换. var strategies = { isNonEmpty: function(value,errMsg){ if(value === ''){ return errMsg; } }, minLength:function(value,length,errMsg){ if(value.length < length){ return errMsg; } } } var validator = function(){ t…
举个栗子 指挥官向士兵下达命令,士兵执行 实现代码如下: class Soldier { public void exe() { System.out.println("执行命令"); } } class Commander { public void invok() { Soldier soldier=new Soldier(); soldier.exe(); } } 代码问题 上诉代码是最基本的一个实现,存在问题: Commander和Soldier高度耦合 新增命令的话,要改动C…
模板模式 模版模式,又被称为模版方法模式,它可以将工作流程进行封装,并且对外提供了个性化的控制,但主流程外界不能修改,也就是说,模版方法模式中,将工作的主体架构规定好,具体类可以根据自己的需要,各自去实现. 几个要点,针对java: 抽象父类(防止实例化),公共方法(public),规定好工作流 抽象父类规定好抽象方法(protected),具体由子类实现,父类将抽象方法加入自己的工作流 具体子类实现父类的抽象方法 任意实例化的子类,都会按照父类工作流工作,只是部分(抽象方法实现)不同 abst…
Modem结构 Visitor模式 对于被访问(Modem)层次结构中的每一个派生类,访问者(Visitor)层次中都有一个对应的方法. 从派生类到方法的90度旋转. 新增类似的Windows配置函数时,Visitor模式使用Visitor派生类来代替了被访问者结构中的方法. 双重分发:accept()+visit()两个动态分发. 形成了一个功能矩阵:不同类型的Modem的轴线+不同OS的轴线.每一个单一都被一个功能(描绘了特定的Modem在特定的OS中使用的)填充. Acyclic Visi…
编辑模式 浏览模式 设置焦点 //在使用前需要Webbrowser已经浏览过一个网页 否则错误 uses MSHTML; ///获取Webbrowser编辑模式里面的内容procedure EditMode();begin  (Form1.WebBrowser1.Document as IHTMLDocument2).designMode := 'on';end;//-----------------------------------------------------------------…
1.意向 同意一个目标,然后改变其内部状态,改变它的行为. 对象似乎改变它的类别. 2.别名 状态对象(Objects for States) 3.动机 考虑一个表示网络连接的类TCPConnection.一个TCPConnection对象的状态处于若干不同状态之中的一个:连接已建立(Established).正在监听(Listenling).连接已关闭(Closed).当一个TCPConnection对象收到其它对象的请求时.它依据自身的当前状态做出不同的反应.比如,一个Open请求的结果依赖…
http://www.cnblogs.com/wanqieddy/archive/2013/09/06/3305482.html android线程池的理解,晚上在家无事 预习了一下android异步加载的例子,也学习到了一个很重要的东东 那就是线程池+缓存  下面看他们的理解. [size=1.8em]Handler+Runnable模式 我们先看一个并不是异步线程加载的例子,使用 Handler+Runnable模式. 这里为何不是新开线程的原因请参看这篇文章:Android Runnabl…