2

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

为什么会出现这个问题,我可以做些什么来解决它?

4

1 回答 1

5

此问题已在此处提出: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);
}
于 2013-08-16T03:33:40.237 回答