Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

Safari 那又硬又臭的 localStorage

  Safari!又是 Safari!突然有爆粗口的冲动。我记得之前好像有扯过关于 Safari 的隐身模式对 localStorage 不兼容的文章(我自己都找不到了)。当时用了一个重写 window.localStorage 的办法,至少让程序访问不报错了。然而现在,PC 版的 Safari 又出问题了。
  之前踩这个坑的时候是在移动端,重写 localStorage 修复了 iPhone 上的 BUG。后来开发 PC 版时我也意识到了这个问题,把同样的代码搬了过来。然而,我发现在 PC 版(测试于 Mac OS X yesemite 10.10.2)的 Safari 中,localStorage 这玩意儿居然是 configurable false 的! Object.getOwnPropertyDescriptor(window, 'localStorage');   下面是 Chrome 和 Firefox 上的结果


  虽然 Firefox 是以 getter 的形式访问这个属性的,但无妨,至少是 configurable true 的。然而 Safari 呢?

  这一坨到底是什么?没有 getter 和 setter,甚至没有 value。脑子里突然蹦出庞麦郎的那句「 都~~~没有!」。然而在 Safari 上却可以访问到这个 localStorage 对象,而且进行任何操作都报错。

  重点是 configurable false!端出这一坨东西也就算了,结果还是 configurable false 的!这意味着 localStorage 无法 polyfill!那么,是不是要实现一个 safeLocalStorage 来把程序内所有对 localStorage 的操作都包裹一层呢?也是醉了!
网名:
3.80.55.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^