为什么Internet Explorer有时会在数据准备好之前触发本地存储事件?

时间:2013-08-16 03:33:40

标签: javascript html5 local-storage

Internet Explorer 10有时会在访问新值之前触发窗口“storage”事件。我有一个“存储”事件的监听器,它对正在设置的新数据作出反应,但有时无法访问它。这尤其成问题,因为侦听器无法对实际的新数据做出反应。

为什么会出现此问题,我该怎么做才能解决问题?

1 个答案:

答案 0 :(得分:5)

此问题已在此处提出:localStorage.getItem returns old data in IE 9

这是我在IE10中测试过的解决方案,并期望在IE8和IE9中使用相同的工具:

首先,我的javascript组件不直接监听窗口“storage”事件,而是听取我创建的“事件调度程序”。事件调度程序侦听窗口“storage”事件并触发主干事件。我所做的是延迟我的eventDispatcher的存储事件触发器足够长的时间让IE赶上来。使用Underscore.js的defer()方法,我可以在浏览器中获得一致的行为,而不会对用户体验产生任何影响。

这是我的dispatchStorageEvent()方法的样子:

$(window).on('storage', dispatchStorageEvent);
function dispatchStorageEvent(event) {
  _.defer(function() {
    var originalEvent = JSON.parse(event.originalEvent);
    ...
    eventDispatcher.trigger("storageEvent:" + originalEvent.key, originalEvent.newValue);
  }, event);
}