localStorage单页面及不同页面监听变动【转】

转载地址:https://www.cnblogs.com/7qin/p/10196539.html

分析

H5本地存储有两个API,一个是Web Storage,还有一个是Web SQL。不管是哪一个,都是基于JavaScript语言来使用,而Web Storage提供了两种存储类型 API: sessionStorage 和 localStorage,二者的差异主要是数据的保存时长及数据的共享方式。

那么,如何监测本地存储webstorage的数据是否改变呢?

在H5中,window对象里面有一个storage事件,我们可以进行监听或者指定其事件处理函数的方法,在其他页面修改了sessionstorage或者localstorage中的值时,就会触发注册了storage事件。

我们先看一下几个属性:

1、event.key 属性:属性值为在 session 或 localStorage 中被修改的数据键值。

2、event.oldValue 属性:属性值为在 sessionStorage 或 localStorage 中被修改的值。

3、event.newValue 属性:属性值为在 sessionStorage 或 localStorage 中被修改后的值

4、event.url 属性:属性值为修改 sessionStorage 或 localStorage 中值的页面的URL地址

5、event.storageArea 属性 : 属性值为被变动的 sessionStorage 对象或 localStorage 对象

引用《h5移动web开发指南》上的话:

“当同源页面的某个页面修改了localStorage,其余的同源页面只要注册了storage事件,就会触发”
所以,localStorage的例子运行需要如下条件:

同一浏览器打开了两个同源页面
其中一个网页修改了localStorage
另一网页注册了storage事件
很容易犯的错误是,在同一个网页修改本地存储,又在同一个网页监听,这样是没有效果的。

例子

接下来我们通过两个例子来体验一下。

实时监听的页面:



    
        
        利用storage事件实时监视Web Storage中的数据
    
    
        
        
    

修改localStorage中数据的页面:



    
        
        用于修改localStorage 中数据的页面的代码
    
    
        
        请输入一些值:
        
    

实际效果:

image

代码中用到的函数:

charCodeAt()    可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。 
fromCharCode()  可接受一个指定的 Unicode 值,然后返回一个字符串。 
unescape()      可对通过 escape() 编码的字符串进行解码。

下面是关于Unicode码的一些注解:

Unicode只有一个字符集,中、日、韩的三种文字占用了Unicode中0x3000到0x9FFF的部分 
Unicode目前普遍采用的是UCS-2,它用两个字节来编码一个字符, 比如汉字”经”的编码是
0x7ECF,注意字符码一般用十六进制来 表示,为了与十进制区分,十六进制以0x开头,0x7ECF
转换成十进制 就是32463,UCS-2用两个字节来编码字符,两个字节就是16位二进制, 2的16
次方等于65536,所以UCS-2最多能编码65536个字符。 编码从0到127的字符与ASCII编码的
字符一样,比如字母”a”的Unicode 编码是0x0061,十进制是97,而”a”的ASCII编码是0x61,
十进制也是97, 对于汉字的编码,事实上Unicode对汉字支持不怎么好,这也是没办法的, 简
体和繁体总共有六七万个汉字,而UCS-2最多能表示65536个,才六万 多个,所以Unicode只
能排除一些几乎不用的汉字,好在常用的简体汉字 也不过七千多个,为了能表示所有汉字,
Unicode也有UCS-4规范,就是用 4个字节来编码字符

扩展

如果非得要在同一网页监听怎么办?可以重写localStorage的方法,抛出自定义事件:


你可能感兴趣的:(localStorage单页面及不同页面监听变动【转】)