WebStorageで、ワンライナー IE8, IE9pp3 ブラクラ
localStorage.removeItem() 以外にも、localStorage.setItem(); や localStorage[key] = value; でも落ちるようです(コメント欄参照)
<input id="A" type="text" value="" /><script>localStorage.removeItem(A.value)</script>
上記のコードをIE8で実行すると、タブクラッシュ → 復元 → タブクラッシュ → 復元機能停止 が発生します。
IE9pp3ではブラウザがクラッシュします。
回避するには
テキストフィールドに値を入れるか、A.value を文字列型にキャストすることにより回避できます。
<input id="A" type="text" value="hoge" /><script>localStorage.removeItem(A.value)</script> または <input id="A" type="text" value="" /><script>localStorage.removeItem(A.value + "")</script>
動的に発病することも
以下のコードでも発病条件を満たすので気をつけてください。テキストフィールドに対する参照をremoveItemの引数に渡すとダメです。
<input id="A" type="text" value="a" /> // 最初テキストフィールドは空ではないが… <script> A.value = ""; // テキストフィールドを空にして… localStorage.removeItem(A.value); // これでクラッシュ </script>
変数に入れて渡すのもダメです。
A.value = ""; // テキストフィールドを空にしても… var val = A.value; // 一度変数に入れれば、あるいは… localStorage.removeItem(val); // 残念!
以下のコードでは落ちません。
localStorage.removeItem("")
結局どうすればよいか
removeItem() に渡す引数は、必ず文字列にキャストしてしまえば安心できます。
localStorage.removeItem(value + "")
これ以外にも、IE の WebStorage(DOM Storage) の実装は localStorage.key なども W3C の仕様とは微妙に異なっているようです。
そのうち修正されるといいですね。