Internet Explorer 10 有时会在访问新值之前触发窗口“存储”事件。我有一个“存储”事件的侦听器,它对设置的新数据做出反应,但有时无法访问它。这尤其成问题,因为侦听器无法对实际的新数据做出反应。
为什么会出现这个问题,我可以做些什么来解决它?
Internet Explorer 10 有时会在访问新值之前触发窗口“存储”事件。我有一个“存储”事件的侦听器,它对设置的新数据做出反应,但有时无法访问它。这尤其成问题,因为侦听器无法对实际的新数据做出反应。
为什么会出现这个问题,我可以做些什么来解决它?
此问题已在此处提出:localStorage.getItem 在 IE 9 中返回旧数据
这是我在 IE10 中测试并希望在 IE8 和 IE9 中同样工作的解决方案:
首先,我的 javascript 组件不直接监听窗口“存储”事件,而是监听我创建的“事件调度程序”。事件分派器监听窗口“存储”事件并触发主干事件。我所做的是将我的 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);
}