【问题标题】:How can I get an event to fire every time localStorage is updated in Safari 5+?每次在 Safari 5+ 中更新 localStorage 时,如何触发事件?
【发布时间】:2010-08-25 04:50:34
【问题描述】:

我已尝试关注the examples on the Safari Developer Site

文档建议像这样添加事件侦听器:

window.addEventListener('storage', storage_handler, false);

然后像这样设置你的处理函数:

function storage_handler(evt)
{
    alert('The modified key was '+evt.key);
    alert('The original value was '+evt.oldValue);
    alert('The new value is '+evt.newValue);
    alert('The URL of the page that made the change was '+evt.url);
    alert('The window where the change was made was '+evt.source);
}

但我似乎无法让此代码在我的机器(OS X 10.6、Safari 5.01)和我的 iPhone 3GS(iOS 4.02)上的 Safari 上运行。

This article 提供了一个单独的方法:

window.onload = function() {
    ...
    document.body.setAttribute("onstorage", "handleOnStorage();");
}

function handleOnStorage() {
    if (window.event && window.event.key.indexOf("index::") == 0){
        $("stats").innerHTML = "";
        displayStats();
    }
}

但我也没有运气。

我做错了吗?这是一个错误吗?

【问题讨论】:

  • 我为您修复了您问题中的链接;一旦您获得更多代表,您应该能够很快添加更多链接。遗憾的是我不知道你的问题的答案。希望其他人可以提供帮助!
  • 一个很好的演示及其代码 sn-p 已经可用here 这有助于理解这个概念及其工作原理。 html5demos.com/storage-events
  • 你仍然有这个链接,这可能有助于很好地理解 sessionStorage nczonline.net/blog/2009/07/21/introduction-to-sessionstorage

标签: html safari local-storage


【解决方案1】:

在进一步调查后(在朋友的帮助下),我发现 storage_handler 方法不是在当前窗口或选项卡中的页面上的本地存储值更改时调用,而是在另一个选项卡中更改时调用。

例如,如果我打开了两个选项卡,并且在每个选项卡的页面中都有控件来更改本地存储设置,那么当我点击第一个选项卡中的控件时,会在另一个选项卡中调用 storage_handler 方法。

【讨论】:

【解决方案2】:

如果您想在对象保存在同一页面的 localstorage 后执行某些操作,您可以在调用 localStorage.setItem 后手动调用该函数,并从 storage 事件监听器中调用相同的函数来处理多个选项卡。

【讨论】:

    【解决方案3】:

    我知道这是在询问 Safari,但根据 Mozilla 开发者网络,只有当 Web 存储对象从页面外部(例如,在另一个选项卡中)更改时才会触发 StorageEvent。

    https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API

    向下滚动到“使用 StorageEvent 响应存储更改”。

    (我会将此作为评论添加到已接受的答案中,但我没有代表。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-01
      • 1970-01-01
      相关资源
      最近更新 更多