HTML5のローカルストレージ機能

HTML5のローカルストレージ機能

この記事で紹介するローカルストレージは、Webストレージ、Web SQLデータベース、IndexedDBです。

Webストレージ

Web Storageは、HTML5で導入された非常に重要な機能です。クライアント側でローカルにデータを保存できます。HTML4Cookieに似ていますが、実現可能な機能はCookieよりもはるかに強力です。Cookieのサイズは4KBに制限されています。公式の推奨事項Webストレージの容量は各Webサイト5MB用です。

Webストレージは2つのタイプに分けられます:

sessionStorageはデータをセッションに保存し、ブラウザを閉じると消えます。

localStorageは常にクライアントにデータをローカルに保存します。html5localStorageはHTML5ローカルストレージWebストレージ機能のAPIの1つであり、html5 localStorageは一時的なオフラインデータを保存し、ファイルやデータベースと同じようにクライアントにデータを保存するために使用されます。永続的な性質を持っています。

[localstorageフォルダーはどこにありますか?付録を見てください]

 

sessionStorageであるかlocalStorageであるかに関係なく、使用可能なAPIは同じです。一般的に使用されるAPIは次のとおりです(例としてlocalStorageを取り上げます)。

データを保存します:localStorage.setItem(key、value);

データの読み取り:localStorage.getItem(key);

単一のデータを削除します:localStorage.removeItem(key);

すべてのデータを削除します:localStorage.clear();

インデックスのキーを取得します:localStorage.key(index);

その中で、キーと値の両方が文字列である必要があります。つまり、Web StorageAPIは文字列のみを操作できます。

セキュリティ上の理由から、お金やその他の重要な情報が関係している場合は、背景を持っている方がよいでしょう。

【注意

LocalStorageストレージメソッド。次の3つのメソッドは同じ効果があります。

localStorage.name = 'vanida;

localStorage ["name"] = 'vanida';

localStorage.setItem( "name"、 "vanida");

 

LocalStorageはvalueメソッドを取得しますが、次の3つのメソッドは同じ効果があります。

var name = localStorage ["name"]

var name = localStorage.name

var name = localStorage.getItem( "name");

 

LocalStorageは特定の値のメソッドをクリアします。次の2つのメソッドは同じ効果があります。

localStorage.removeItem( "name");

localStorage.name = '';

 

LocalStorageはすべての値をクリアしますメソッド:

localStorage.clear()

 

ブラウザがlocalstorageをローカルに保存しているかどうかを検出するコード:

if(window.localStorage){

 alert( 'このブラウザはローカルストレージをサポートしています');

}そうしないと{

 alert( 'Tこのブラウザはローカルストレージをサポートしていません');

}

 

以下に、簡単な例を示します。次の機能を実現するための簡単な名簿アプレットです。

連絡先を入力します。各連絡先レコードには、名前と携帯電話番号の2つのフィールドがあり、携帯電話番号をキーとしてlocalStorageに保存されます。

携帯電話番号に応じて、所有者を見つけるか削除します。

現在保存されているすべての連絡先情報を一覧表示します。

コードは次のように表示されます。

<!DOCTYPE html>
<html >
<head>
<meta charset="utf-8"> 
<title>HTML5本地存储之WebStorage例子</title>
<script>
//调用函数
//loadAll();
//保存数据  
function save(){  
    var user_name = document.getElementById("user_name").value;  
    var mobilephone = document.getElementById("mobilephone").value;  
    localStorage.setItem(mobilephone,user_name);  
    loadAll();  
}  
//将所有存储在localStorage中的对象提取出来,并展现到界面上  
function loadAll(){  
    var list = document.getElementById("list");  
    if(localStorage.length>0){  
        var result = "<table border='1'>";  
        result += "<tr><td>姓名</td><td>手机号码</td></tr>";  
        for(var i=0;i<localStorage.length;i++){  
            var mobilephone = localStorage.key(i);  
            var name = localStorage.getItem(mobilephone);  
            result += "<tr><td>"+name+"</td><td>"+mobilephone+"</td></tr>";  
        }  
        result += "</table>";  
        list.innerHTML = result;  
    }else{  
        list.innerHTML = "目前数据为空,赶紧开始加入联系人吧";  
    }  
}  
//查找数据  
function find(){  
    var search_phone = document.getElementById("search_phone").value;  
    var name = localStorage.getItem(search_phone);  
    var find_result = document.getElementById("find_result");  
    find_result.innerHTML = search_phone + "的机主是:" + name;  
}
//删除数据  
function del(){
     //window.localStorage.clear();  //删除全部数据
     var search_phone = document.getElementById("search_phone").value;
     localStorage.removeItem(search_phone);// 查找键值对删除
     loadAll();  
}
</script>
</head>
<body onload="loadAll()">
<h3><center>简单的通讯录<center></h3>
<hr color="#666666">
<div style="border: 2px dashed #ccc;width:320px;text-align:center;">     
<label for="user_name">姓名:</label>  
<input type="text" id="user_name" name="user_name" class="text"/>  
 <br/>  
<label for="mobilephone">手机:</label>  
<input type="text" id="mobilephone" name="mobilephone"/>  
<br/>  
<input type="button" onclick="save()" value="新增记录"/>  
<hr/>  
<label for="search_phone">输入手机号:</label>  
<input type="text" id="search_phone" name="search_phone"/>  
<input type="button" onclick="find()" value="查找机主"/> 
<input type="button" onclick="del()" value="删除记录"/>   
<p id="find_result"><br/></p>  
</div>  
<br/>  
<div id="list">  
</div>  
<br/>  
<dividdivid="list">  
</div>  
</body>
</html>

ファイルをWebStorageA.htmlとして保存し、フォルダー(ディレクトリ)に配置し(ここではD:\ webの練習です。実際の状況に応じて決定できます)、ブラウザーでiframeDemo.htmlを開くと、表示効果は次のようになります。 :

2つの新しい連絡先レコードが追加されました。

 

WebSQLデータベース

Web SQLデータベースAPIはHTML5仕様の一部ではありませんが、SQLを使用してクライアントデータベースを操作するための一連のAPIを導入する独立した仕様です。ローカルデータベースを操作するには、mysqlクエリと同様のクエリステートメントを使用します。

ブラウザがこの機能をサポートしているかどうかを確認します

if(window.openDatabase){

    alert( '現在のブラウザはwebSQLをサポートしています!');      

} そうしないと {

     alert( '現在のブラウザはwebSQLをサポートしていません!!!');

}

 

コアメソッド:

①openDatabase:このメソッドは、既存のデータベースまたは新しく作成されたデータベースを使用してデータベースオブジェクトを作成します。

// openDatabase()メソッドに対応する5つのパラメーターは、データベース名、バージョン番号、説明テキスト、データベースサイズ、作成コールバックです。

var db = openDatabase( 'mydb'、 '1.0'、 'Test DB'、2 * 1024 * 1024、fn);

openDatabaseメソッドは、既存のデータベースを開きます。データベースが存在しない場合は、データベースを作成することもできます。いくつかのパラメーターの意味は次のとおりです。

1.データベース名。

2.データベースのバージョン番号。現時点では、1.0を渡すだけで十分ですが、もちろん、入力する必要はありません。

3.データベースの説明。

4.割り当てられたデータベースのサイズを設定します(単位はkbです)。

5.コールバック関数(省略可能)。データベースは、最初に呼び出されたときに作成され、その後接続が確立されます。

 

②トランザクション:この方法では、トランザクションを制御し、この状況に基づいてコミットまたはロールバックを実行できます。

//トランザクションを開始します

database.transaction(function(sql){

     //ここでデータベースの追加と削除を操作して確認します

});   

トランザクションメソッドはコールバック関数を設定できます。この関数は、開いたトランザクションのオブジェクトであるパラメーターを受け入れることができます。次に、このオブジェクトを介してSQLスクリプトを実行できます。これは、次の手順と組み合わせることができます。

③executeSql:このメソッドは、実際のSQLクエリを実行するために使用されます。

ts.executeSql(sqlQuery、[value1、value2 ..]、dataHandler、errorHandler)

パラメータの説明:

qlQuery:具体的に実行する必要のあるsqlステートメント。作成、選択、更新、削除が可能です。

value1、value2 ..]:sqlステートメントで使用されるすべてのパラメーターの配列。executeSqlメソッドで、s>ステートメントで使用されるパラメーターを「?」に置き換えてから、これらのパラメーターを配列内の配列に配置します。 2番目のパラメーター

ataHandler:実行が成功するとコールバック関数が呼び出され、この関数を使用してクエリ結果セットを取得できます。

errorHandler:実行が失敗したときに呼び出されるコールバック関数。

 

これがデモ(ブラウザコンソールで実行)です。コードは次のとおりです。

// 打开|创建DB
var db = openDatabase('corp', '1.0', 'corporation info', 2 * 1024);

// 创建数据表
db.transaction(function (tx) {
	tx.executeSql('create table if not exists corporation (id unique, name)');
});

// 新增数据行
db.transaction(function (tx) {
	tx.executeSql('insert into corporation (id, name) values (1, "Baidu")');
	tx.executeSql('insert into corporation (id, name) values (?, ?)', [2, 'Alibaba']);
	tx.executeSql('insert into corporation (id, name) values (3, "Tencent")');
});

// 查询
db.transaction(function(tx) {
	/*tx.executeSql(SQL语句, SQL参数列表, func, null);*/
	tx.executeSql('select * from corporation', [], function(tx, results) {
		var len = results.rows.length;
		console.log('记录条数:', len);
		for (var i = 0; i < len; i++) {
			var record = results.rows.item(i);
			console.log(record.id, record.name);
		}
	}, null);
});

// 删除
db.transaction(function(tx) {
	/*tx.executeSql('delete from corporation where id = ?', [id]);*/
	tx.executeSql('delete from corporation where id = 1');
});

// 更新
db.transaction(function(tx) {
	tx.executeSql('update corporation set name = ? where id = ?', ['Ali', 2])
});

 

ブラウザを開き(ここではエッジブラウザが使用されています)、F12キーを押してコンソール(コンソール)で実行します。次の図を参照してください:

IndexedDB

HTML5の一部としてW3Cによって尊重されているIndexedDB(IndexedDB)は、豊富なローカルストレージデータを使用してデータ集約型のオフラインHTML5Webアプリケーションを作成するのに非常に役立ちます。また、データをローカルにキャッシュするのに役立ち、従来のオンラインWebアプリケーション(モバイルWebアプリケーションなど)の実行と応答を高速化できます。

indexedDBは、ブラウザに付属する軽量のNOSQLデータベースです。Web Sqlと比較すると、インデックス作成、トランザクション処理、クエリ機能など、より効率的です。HTML5ローカルストレージでは、IndexedDBがほとんどのデータを保存します。

 

IndexedDBの全体的な構造:

その中で、DBはデータベースであり、Object Storeはデータテーブルであり、temはテーブル内のレコードと同じです。

IndexedDBを使用するhttps://developer.mozilla.org/zh-CN/docs/Web/API/IndexedDB_API/Using_IndexedDBを参照してください

indexedDBデータベースのサンプルコードを以下に示します。

<!DOCTYPE html>
<html>	
<head>		
<script>	
window.indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || 
window.msIndexedDB;
window.IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || 
window.msIDBTransaction;
window.IDBKeyRange = window.IDBKeyRange|| window.webkitIDBKeyRange || 
window.msIDBKeyRange;
window.IDBCursor = window.IDBCursor || window.webkitIDBCursor || window.msIDBCursor;
const dbName = 'indexedDBTest'; //数据库名
const dbVersion = 20180408; //版本号
let idb; 
function window_onload(){
    document.getElementById("btnSaveData").disabled=true;
    document.getElementById("btnSearchData").disabled=true;
}
function ConnectDataBase(){
    /*连接数据库,dbConnect对象为一个IDBOpenDBRequest对象,代表数据库连接
    的请求对象*/
    let dbConnect = indexedDB.open(dbName, dbVersion);
    dbConnect.onsuccess = function(e){//连接成功   
        idb = e.target.result; //引用IDBDatabase对象 
        alert('数据库连接成功');
        document.getElementById("btnSaveData").disabled=false;
    };
    dbConnect.onerror = function(){
        alert('数据库连接失败');
    };
    dbConnect.onupgradeneeded = function(e){
        //数据库版本更新
        //e.target.result为一个IDBDatabase对象,代表连接成功的数据库对象
        idb = e.target.result; 
        /*e.target.transaction属性值为一个IDBTransaction事务对象,此处代表
        版本更新事务*/
        let tx = e.target.transaction;
        let name = 'Users2';
        let optionalParameters = {
            keyPath: 'userId',
            autoIncrement: false
        };
        let store = idb.createObjectStore(name,  optionalParameters);
        alert('对象仓库创建成功');
        name =  'userNameIndex';
        keyPath = 'userName';
        optionalParameters = {
            unique: false,
            multiEntry: false 
        };
 
        let idx = store.createIndex(name, keyPath, optionalParameters);
        alert('索引创建成功');
    };

}
function SaveData(){
    //开启事务
    let tx = idb.transaction(['Users2'],'readwrite'); 
    tx.oncomplete = function(){
        alert('保存数据成功');
        document.getElementById("btnSearchData").disabled=false;
    }
    tx.onabort = function(){alert('保存数据失败'); }
    let store = tx.objectStore('Users2');
    let value = {
        userId: 1,
        userName: '用户D',
        address: '住址1'
    };
    store.put(value);
    value = {
        userId:3,
        userName: '用户C',
        address: '住址2'
    };
    store.put(value);
    value = {
        userId: 5,
        userName: '用户B',
        address: '住址3'
    };
    store.put(value);
    value = {
        userId: 7,
        userName: '用户A',
        address: '住址4'
    };
    store.put(value);
}		
function SearchData(){
    //开启事务
    let range = IDBKeyRange.lowerBound('用户A');
    let tx = idb.transaction(['Users2'],'readonly'); 
    let store = tx.objectStore('Users2');
    let req = store.getKey(IDBKeyRange.bound(2,10));
    req.onsuccess = function(){
        alert('检索到一条数据,数据主键值为'+this.result);  
    }
    req.onerror = function(){
        alert('检索数据失败');
    }
} 
</script>		
</head>	
<body onload="window_onload()">
<input id="btnConnectDataBase" type="button" value="连接数据库" 
onclick="ConnectDataBase();"/>
<input id="btnSaveData"  type="button" value="保存数据" onclick="SaveData();"/>
<input id="btnSearchData" type="button" value="检索数据" onclick="SearchData();"/>
</body>
</html>

ブラウザを開き(ここではエッジブラウザが使用されています)、F12キーを押してコンソール(コンソール)で実行します。次の図を参照してください:

 

 

付録、localstorageフォルダーはどこにありますか?

Google Chromeの場合、Chromeブラウザを起動し、ChromeブラウザのアドレスバーにChrome:Versionと入力します

Microsoft Edgeブラウザーの場合、Edgeブラウザーを起動し、Chromeブラウザーのアドレスバーにedge:Versionと入力します。

 

ブラウザで表示する場合は、デバッグツール(F12)を開くと、[アプリケーション]タブで表示できます。

 

おすすめ

転載: blog.csdn.net/cnds123/article/details/113859797