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

Vin*_*ior 2 javascript html5 local-storage

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

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

Vin*_*ior 5

此问题已在此处提出:localStorage.getItem在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);
}
Run Code Online (Sandbox Code Playgroud)