Bug with Chrome's localStorage implementation?很好地解释了规范,以及它在Opera和IE9中的表现方式。如何解决浏览器之间不同的“存储”事件行为?
但是,现在呢?
这会真的搞乱我的代码(任何代码),它依赖于实现在浏览器上的一种方式,当它是另一种。
如何测试以确定事件是否在调用它的窗口上触发?
我唯一能想到的就是使用setTimeout()等待并查看事件是否在调用它的窗口中触发,如果没有,则执行一些操作。但是,当存储事件被连续调用时,这可能会造成一些可怕的错误。
在我的情况下,我需要所有窗口的事件触发,不是所有的窗口都打电话给它。在Chrome中,按照规范正确实现它,这只是添加到localStorage.setItem()后添加额外功能的问题,但在IE,Firefox3.6和Opera中它将有效地做到两次。我也可以有不同的基于浏览器的代码,但我应该测试兼容性而不是浏览器版本。
有没有办法用localStorage支持“修补”所有的浏览器,让它们都以相同的方式处理它们?
看起来像一次“开始”写入包含唯一标识的密钥的兼容性测试是可能的,例如,一个时间戳,然后记录它何时返回。如果事件没有回来,那么您的代码应该继续,并在更改存储时在本地启动它。否则,绕过该逻辑。这里粗略的想法...不是答案。 – joshp
是的。我也在考虑这一点,但我也属于“可能有问题而且不是很好的做法”。我认为这个解决方案需要类似于那些在没有它的情况下为浏览器添加JSON解析和stringify支持的补丁,但是在这种情况下会覆盖localStorage事件。不过,我不知道从哪里开始做这样的事情。我甚至不知道如何查看当前代码的外观,或者找出我甚至需要覆盖哪些函数,如果这甚至是可能的话。 – sadtaco
当你与猪搏斗(任性的浏览器)时,你会变脏。如果一个库不存在,编写这样的库会很有趣。问题是什么是最好的能力测试。如果我找到答案,我会发布答案。 – joshp