4

Chrome の localStorage 実装にバグがありますか? 仕様と、Opera と IE9 での動作の違いをよく説明しています。

しかし、今何ですか?

それは、実装がブラウザー上の一方向である場合に、別の方法であることに依存する私のコード (任意のコード) を本当に台無しにします。

イベントを呼び出したウィンドウでイベントが発生しているかどうかをテストするにはどうすればよいですか?

私が把握できる唯一のことは、 setTimeout() を使用して待機し、それを呼び出すウィンドウでイベントが発生しているかどうかを確認し、そうでない場合は何かを行うことです。ただし、ストレージ イベントが立て続けに呼び出されると、ひどいバグが発生する可能性があります。

私の場合、すべてのウィンドウではなく、それを呼び出すウィンドウに対してイベントを発生させる必要があります。仕様に正しく実装されている Chrome では、これは localStorage.setItem() に追加した後に追加の関数を追加するだけの問題ですが、IE、Firefox3.6、および Opera では、それを実質的に 2 回行うことになります。ブラウザに基づいて異なるコードを使用することもできますが、ブラウザのバージョンではなく互換性をテストする必要があります。

localStorage をサポートするすべてのブラウザーに「パッチ」を適用して、すべてのブラウザーで同じ方法でイベントを処理する方法はありますか?

4

2 に答える 2

1

私は自分の問題を解決したものをいくつか

var localStorageSpecCompliant = true;
var specCompliantTestVal = new Date().getTime();
function onStorage(ev) {
    if( ev.key == "specCompliantTest"+specCompliantTestVal ){
        localStorageSpecCompliant = false;
    }
    localStorage.removeItem("specCompliantTest"+specCompliantTestVal);
};
if( window.addEventListener ){  
    window.addEventListener("storage", onStorage, false);  
} else { window.attachEvent("onstorage", onStorage); }

localStorage["specCompliantTest"+specCompliantTestVal] = "This tests if the browsers localStorage storage event is spec compliant or ont.";

localStorage_setItem = function(key, value){
    localStorage[key] = value;
    if( localStorageSpecCompliant ){
        var dirtyFakeEvent = {"key":key, "newValue":value};
        onStorage(dirtyFakeEvent);
    }
}

しかし、イベントを常に同じように機能させるある種のパッチは、はるかに優れています。この方法は理想的ではありません。実際の「ストレージ」イベントを偽装して起動する方法がわからなかったので、関数を直接呼び出しました。

コンプライアンスを単純に修正するフレームワークは素晴らしいでしょう。localStorage が IE7 に存在しないことに問題はありません。しかし、仕様とは異なる、ブラウザごとに機能がまったく異なることは非常に問題です。

于 2012-05-13T16:52:56.373 に答える
0

私はこれに興味があり、いくつかの js ストレージ ライブラリを調べました。これまでのところ、ストレージ イベントをサポートするのは YUI 2 Storage Utility です。ブラウザー間での動作が正常化されるかどうかを見てみるのは興味深いことです。YUI3 に基づいた興味深いライブラリもあり、change イベントと storage ready イベントをアドバタイズします。

ゆい2倉庫

YUI 3 ベースの Storage Lite

これらには、必要以上の依存関係が含まれる場合があります。また、問題をより簡単に解決する方法を学ぶ方法を提供する場合もあります。

これらのライブラリは、HTML5 スタイルのストレージを提供しないブラウザーをどうするかという問題にも対応しています。

于 2012-05-13T00:33:27.827 に答える