Internet Explorer 10有时会在访问新值之前触发窗口“storage”事件。我有一个“存储”事件的监听器,它对正在设置的新数据作出反应,但有时无法访问它。这尤其成问题,因为侦听器无法对实际的新数据做出反应。
为什么会出现此问题,我该怎么做才能解决问题?
答案 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);
}