不自重者,取辱。不自长者,取祸。不自满者,受益。不自足者,博闻。

前两天在项目中发现一个win8系统下,ie10中访问localStorage,直接在控制台发现有Error:拒绝访问。

觉得好扯淡,google了一下,原来有好多人都遇到过,其中,找到一个解决方案(严格来说,不算):

http://answers.microsoft.com/en-us/ie/forum/ie10-windows_8/get-the-internet-explorer-script-error-which-says/be14db88-0ace-4771-a5d0-7754be69a98e?msgId=2561b6be-86c2-4b3f-8790-66dbd9cea4c9

文章写了都一年多了,一直没个合适的地方放,现在终于可以搬上来了。


背景

先看看各种本地存储的变革:

  • Cookies:浏览器均支持,容量为4KB

  • UserData:仅IE支持,容量为64KB

  • Flash:100KB

  • Google Gears SQLite :需要插件支持,容量无限制

  • LocalStorage:HTML5,容量为5M


现准备在项目中试图取代cookie的实现,基本分析如下:

  • 每次和服务器端进行交互,cookie都会在请求中被携带,cookie过多,也造成带宽的浪费

  • cookie的容量很小,或许无法满足当今互联网的本地存储需求

  • 在IE8+、Firefox3.0+、Opera10.5+、Chrome4.0+、Safari4.0+、iPhone2.0+、Andrioid2.0+等平台下,已经完全支持HTML5的LocalStorage

  • 在IE7即以下版本中,可以使用UserData来代替cookie,而且同样比cookie保险

  • 用户可能清cookie,但不见得知道去清UserData或者LocalStorage,这也增强了一道代码保险


到底用啥来取代?

  • UserData:仅IE可用

  • Flash:存储空间够了,也还挺好,可这玩意儿不是HTML原生的

  • Google Gears:存储空间没啥限制,就是得装额外的插件

  • HTML5-LocalStorage:官方建议每个站点可以本地存储5M的内容,非常大了

最后再分析一下现在咱们针对的浏览器:IE系列、FF、Chrome、Safari、Opera,外加双核的遨游、QQ浏览器、搜狗浏览器