Bug with Chrome's localStorage implementation?は、仕様を非常によく説明し、OperaとIE9の動作がどのように異なるかについて説明しています。ブラウザ間で異なる「ストレージ」イベント動作をどのように考慮しますか?
しかし、今は何ですか?
本当に台無しそれは別だとき、ブラウザ上の一つの方法であることを、実装に依存している私のコード(任意のコード)になります。
は、どのように私は、イベントがそれを呼び出し、ウィンドウの上に発射されているかどうかを知るためにテストしていますか?私が理解することができ
唯一のものは待って、イベントがそれを呼び出すか、ウィンドウに発射されたかどうかを確認し、それがない場合は何かをするのsetTimeout()を使用することです。しかし、これは、ストレージイベントがすぐに連続して呼び出されたときに、ひどいバグを引き起こす可能性があります。私の場合は
私はそれを呼び出す1を除くすべて、すべてのウィンドウのために発射イベントをする必要はありません。これを仕様に正しく実装しているChromeでは、これはlocalStorage.setItem()に追加した後に追加機能を追加するだけですが、IE、Firefox3.6、Operaでは効果的にその機能を2回実行します。私はまた、ブラウザに基づいて別のコードを持つことができますが、私はブラウザのバージョンではなく互換性をテストする必要があります。
それらすべてに同じように処理されるイベントを持っているのlocalStorageをサポートした「パッチ」すべてのブラウザにする方法はありますか?
互換性テストのように思えるのは、一度 '一瞬で'一意のIDを含むキーを書くことで可能です。タイムスタンプを作成し、それがいつ戻ってくるかを記録します。イベントが戻ってこない場合は、コードを先に進め、ストレージを変更するときにコードをローカルに起動する必要があります。さもなければその論理をバイパスしてくださいここの荒いアイデア...答えではない。 – joshp
うん。私もそのことを考えていましたが、私はまた「おそらくバギーであり、良いことではありません」の下にあります。私は、このソリューションは、JSONの解析とブラウザのサポートなしにブラウザをサポートするパッチに似ている必要がありますが、この場合はlocalStorageイベントを上書きする必要があると思います。しかし、私はそのようなことをやってどこから始めるべきか分かりません。私は、現在のコードがどのように見えるかを知ることさえできず、もしそれが可能であれば、私が上書きする必要がある機能を把握することさえできません。 – sadtaco
あなたが豚(邪悪なブラウザ)と闘うとき、あなたは汚れます。もし存在しなければ、そういうライブラリを書くのは楽しいでしょう。問題は最高の能力テストです。もし私が見つけたら、私は答えを投稿します。 – joshp