2011-01-04 10 views
2

localStorageの変更時に発生するイベントは、Firefoxでは情報が不足しているようです。localStorageの 'storage'イベントの未定義プロパティ

私は、次のイベントハンドラを設定:このによってトリガされなければならない

function storageEventHandler(e){ 
     alert("key " + e.key); 
     alert("oldValue " + e.oldValue); 
     alert("newValue " + e.newValue); 
     alert("url " + e.url); 
} 

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

:。しかし

localStorage.setItem('foo', 'bar');

、イベント内のすべてのプロパティ(例えばe.keyをし、その他すべて)はすべて定義されていません。私はfirefox 3.16を使用しています。なぜイベントのプロパティは未定義ですか?

EDIT。ここに私が使用しているすべてのコードがあります。ストレージイベントも

のFirefox 3.16ではなく、Firefoxの4.0b8で火災、重要な、私は、ファイルからそれを実行しているXAMPP http://localhost/index.html からそれを実行しています://それはlocalStorage Getting NULL?

<!DOCTYPE html5> 
<html lang="en"> 
<head> 
    <script class="jsbin" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
    <script> 
     $(function() { 
      var edit = document.getElementById('edit'); 

      $(edit).blur(function() { 
       localStorage.setItem('todoData', this.innerHTML); 
      }); 

      // when the page loads 
      if (localStorage.getItem('todoData')) { 
       edit.innerHTML = localStorage.getItem('todoData'); 
      } 

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

      function storageEventHandler(e){ 
       alert('localStorage event fired') 
      } 
     }); 
    </script> 
</head> 
<body> 
<header> 
    <h1> My Simple To-Do List </h1> 
</header> 
<section> 
<ul id="edit" contenteditable="true"> 
    <li></li> 
</ul> 
</section> 
    <em>Add some items, and refresh the page. It'll remember what you typed.</em> 
</body> 
</html> 

EDIT#2ダイ作ります:ここでは、ブラウザ間の問題を示して単純な例は...だ

<html> 
<head> 
<script> 
    function storageEventHandler(e){ 
     alert('localStorage event fired') 
    } 
    window.addEventListener('storage', storageEventHandler, false); 
    localStorage.setItem('foo', 'bar'); 
    alert('ok') 
</script> 

</head> 
    <body> 
    Test 
    </body> 
</html> 

答えて

7

のFirefox 3.6(Geckoの1.9.2)didnの時にこれらの仕様が変更されたプロパティ(および他のほとんどのブラウザが実装されていません」 t implこれらの特性を達成する)。これはFirefox 4(Gecko 2)で修正されています。 https://bugzilla.mozilla.org/show_bug.cgi?id=501423

[編集]あなたのテストケースは単一ページです。 specは言う:

をするときSetItem関数()、removeItem()、および方法は、その後、すべての中で、何かをした場合はクリア()メソッドは、ローカルストレージ領域に関連付けられているStorageオブジェクトx上で呼び出されWindowオブジェクトのlocalStorage属性のStorageオブジェクトが同じ記憶域に関連付けられているHTMLDocumentオブジェクトであるx以外の場合は、以下で説明するように、格納イベントを発生させる必要があります。

イベントを観察するには、同じドメインに別のページが必要です。

+0

ありがとう!非常に有益であり、感謝しています:) – Alexis

+0

残念ながらFirefox 4では何も動作しません=( – Alexis

+0

@Alexis K:テストケースを持っていますか?どのバージョンのテストですか? – Nickolay

関連する問題