兼容性如何?
接下来的各种测试是在以下浏览器中进行的:IE8、Firefox3.6、Chrome5、Safari4、Opera10,事实证明各个浏览器在API方面的实现基本上一致,存在一定的兼容性问题,但不影响正常的使用。
sessionStorage测试
本节主要针对sessionStorage的一些特性进行了测试,测试的重点在于各个浏览器对于session的定义以及跨域情况。测试方法很简单:打开页面A,在页面A中写入当前的session数据,然后通过页面A中的链接或按钮使用不同的方式进入下页面B,如果页面B中能够访问到页面A中的数据则说明浏览器将当前情况的页面A、B视为同一个session。测试的具体结果如表1:
表1 sessionStorage兼容性测试
原窗口target=”_blank
window.open ctrl + click跨域访问
”
IE8是是是是否
Firefox3.6是是是否(null)否
Chrome5是是是否(undefined)否
Safari4是否是否(undefined)否
Opera10是否否否(undefined)否
从表1中可以看出,处于安全性考虑所有浏览器下session数据都是不允许跨域访问的,包括跨子域也是不允许的。其他方面主流浏览器中的实现较为一致。
API测试
方法包括以下几个:
setItem(key,value)、removeItem(key)、getItem(key)、clear()、key(index);
属性包括length、remainingSpace(非标准)。不过存储数据时可以简单的使
用localStorage.key=value的方式。
测试地址为:/pages/html5/web_storage/local/localStorage.html
sessionstorage和localstorage测试结果另人满意,标准中定义的接口在各个浏览器中都已实现,此外IE8下新增了一个非标准
的remainingSpace属性,用于获取存储空间中剩余的空间。结果如表2:
表2 API测试
setItem removeItemgetItem clear key length remainingSpace
IE8是是是是是是是
Firefox3.6是是是是是是否
Chrome5是是是是是是否
Safari4是是是是是是否
Opera10是是是是是是否
此外关于setItem(key,value)方法中的value类型,理论上可以是任意类型,不过实际上浏览器会调用value的toString方法来获取其字符串值并存储到本地,因此如果是自定义的类型则需要自己定义有意义的toString方法。
事件
标准的事件为onstorage,当存储空间中的数据发生变化时触发。此外,IE8中新增了一
个onstoragecommit事件,当数据写入的时候触发。onstorage事件中的事件对象应该支持以下属性:
T he key attribute represents the key being changed.
T he oldValue attribute represents the old value of the key being changed.
T he newValue attribute represents the new value of the key being changed.
T he url attribute represents the address of the document whose key changed.
T he storageArea attribute represents the Storage object that was affected.
对于这一标准的实现,webkit内核的浏览器(Chrome、Safari)以及Opera是完全遵循标
准的,IE8则只实现了url,Firefox下则均未实现。
测试地址为:/pages/html5/web_storage/local/event.html
具体结果见表3。
表3 onStorage事件对象属性测试
key oldValue newValue url storageArea
IE8无无无有无
Firefox3.6无无无无无
Chrome5有有有有有
Safari4有有有有有
Opera10有有有有有
此外,不同的浏览器事件注册的方式以及对象也不一致,具体如表4。
表4 onStorage事件注册对象
事件注册对象备注
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论