12

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 では、このコードを動作させることができないようです。

この記事では、別の方法を提供します。

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

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

しかし、私もそれで運がありませんでした。

私は何か間違ったことをしていますか?これはバグですか?

4

3 に答える 3

20

さらに調査した結果 (友人の助けを借りて)、現在のウィンドウまたはタブのページで localstorage 値が変更されたときではなく、別のタブで変更されたときに storage_handler メソッドが呼び出されることを発見しました。

たとえば、2 つのタブが開いていて、各タブのページに localstorage 設定を変更するためのコントロールがある場合、最初のタブでコントロールを押すと、もう一方のタブで storage_handler メソッドが呼び出されます。

于 2010-08-26T21:30:27.787 に答える
1

これは Safari に関する質問であることは理解していますが、Mozilla Developer Network によると、StorageEvent は Web ストレージ オブジェクトがページの外部 (別のタブなど) から変更された場合にのみ発生します。

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

「StorageEvent によるストレージの変更への対応」まで下にスクロールします。

(これを受け入れられた回答へのコメントとして追加したはずですが、その担当者はいません。)

于 2018-01-08T14:53:49.373 に答える