0

永続データを保存する Web ページを作成しています。IE では、単純に Userdata Behavior を使用してデータまたはオブジェクトを格納できます。さらに、Userdata Behavior は、格納されたオブジェクトをカスタマイズするための getAttribute および setAttribute メソッドを提供します。

ただし、Firefox ではサポートされていません。localStorage では、一意のキーを持つ文字列のみを格納できます。私の質問は、getAttribute や setAttribute などの同様のメソッドを使用して、localStorage に格納されているオブジェクトをカスタマイズすることは可能ですか?

次のコードを、localStorage を使用して firefox で動作する新しいコードに変換したいと考えています。しかし、setAttribute メソッドと getAttribute メソッドを変換する方法がわかりません。何か案が?よろしくお願いします。

<style type="text/css">
.storeuserData {
behavior: url(#default#userData);
</style>
<script type="text/javascript">
function fnSaveInput(){
   var oPersist=oPersistForm.oPersistInput;
   oPersist.setAttribute("sPersist",oPersist.value);
   oPersist.save("oXMLBranch");
}
function fnLoadInput(){
   var oPersist=oPersistForm.oPersistInput;
   oPersist.load("oXMLBranch");
   oPersist.value=oPersist.getAttribute("sPersist");
}
</script>
</head>

<body>

<form id="oPersistForm">
    <input class="storeuserData" type="text" id="oPersistInput">
    <input type="button" value="Load" onclick="fnLoadInput()">
    <input type="button" value="Save" onclick="fnSaveInput()">
</form>
4

1 に答える 1

0

IEの実装についてはよくわかりませんが、ローカルストレージの場合は次のように試すことができます。

function setDataValue(attr, value){
   //If local stoarge var doesn't exist, create it
    if(typeof window.localStorage.mydata == 'undefined') window.localStorage.mydata = '{}';
    //Read data from local storage in to object
    var data = JSON.parse(window.localStorage.mydata);
    //update object
    data[attr] = value;
    //save object back in to local storage
    window.localStorage.mydata = JSON.stringify(data);
}
function getDataValue(attr){
    return JSON.parse(window.localStorage.mydata)[attr];
}

基本的に、上記の2つの関数はすべて、localstorageに保存されているJavaScriptオブジェクト(保存目的でJSONとしてエンコードされている)の読み取りと書き込みです。

次に、関数は次のように記述できます。

function fnSaveInput(){
    var oPersist=oPersistForm.oPersistInput;
    setDataValue('sPersist', oPersist.value);
}
function fnLoadInput(){
    var oPersist=oPersistForm.oPersistInput;
    oPersist.value = getDataValue('sPersist');
}

注意してください、私はこのコードをすべてフリーハンドで書いたので、いくつかのタイプミス/エラーが含まれている可能性があります。

于 2012-03-19T19:04:20.447 に答える