EX DOM Storage の調査結果

前回の続き。
いろいろ試した結果です。

ブラウザを閉じてもsessionStrageのデータが消えない

不具合?

画面ロード時にsessionStrageが参照できない

画面ロード時、sessionStrageはsetTimeoutを使用しないと参照できない。0秒後でもOK。localStrageの場合は参照可。

setTimeout(function(){
    var l = sessionStorage.length;
},0)
exdomstorage.jsの参照パスは省略できない

NG

OK

setItem で上書きができない

キーが存在する場合は、事前に削除する必要がある。


検証プログラム

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <script type="text/javascript" src="./exdomstorage.js"></script>
        <script>
            //var s='local';
            var s='session';
            var setVal = function(k,v){
                if(v==undefined)return;
                if(s.getItem(k)!=undefined){
                    s.removeItem(k);
                }
                s.setItem(k,v);
            }
            var $=function(id){return document.getElementById(id);}
            var get=function(){
                $('log').value='';
                for(var i=0;i<s.length;i++){
                    log.value=log.value+'\n'+s.key(i)+' is '+s.getItem(s.key(i));
                }
            }
            window.onload=function(){
                if(s=='session')setTimeout(function(){s=sessionStorage;get()},0);
                else s=localStorage;
            }
        </script>
    </head>
    <body>
        <textarea id="log" rows="10"></textarea>
        <br/>
        key : <input id="key"/><br/>
        val : <input id="val"/><br/>
        <button onclick="setVal($('key').value,$('val').value);get()">set</button><br/><br/>
        <button onclick="s.clear();get()">clear</button>
    </body>
</html>

ネタ元

Safari4 と IE8 で実装された DOM Storage とは何か
http://d.hatena.ne.jp/amachang/20080924/1222239494