19
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

LocalStorageを利用する際に気をつけること

Last updated at Posted at 2018-11-19

localStorageのサポート状況、利用可能であることを確認する

localStorage を使用する前に、現在のブラウザーセッションでサポート済みかつ使用可能であるかをはじめに確かめる。
例えば、利用しているブラウザでCookieの利用をOffにしているブラウザや、一部のプライベートブラウズ(AndroidのWebViewでWebStorageを有効にしていない時など)でそのまま利用するとエラーとなる。

localStorage がサポート済みかつ使用可能であるかを検出する関数は公式でも公開されている。


function storageAvailable(type) {
	try {
		var storage = window[type],
			x = '__storage_test__';
		storage.setItem(x, x);
		storage.removeItem(x);
		return true;
	} catch(e) {
        return e instanceof DOMException && (
            // everything except Firefox
            e.code === 22 ||
            // Firefox
            e.code === 1014 ||
            // test name field too, because code might not be present
            // everything except Firefox
            e.name === 'QuotaExceededError' ||
            // Firefox
            e.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&
            // acknowledge QuotaExceededError only if there's something already stored
            storage.length !== 0;
    }
}

// 利用例
if (storageAvailable('localStorage')) {
	// localStorage をちゃんと使用できます
} else {
	// 残念ながら localStorage は使用できません
}

上記例では、localStorageに対し、ダミーで値をセットし削除を行うことで、正常に処理が終了した際にはtrueを、問題が起きた際はExceptionに処理を流すことで判定を行なっている。

localStorageに値をsetしたり、getするさいに都度呼ぶのが面倒なときはsetやget自体を関数にしすることで上記同様エラーを回避することができる。

function setItem(key, value) {
    try {
        localStorage.setItem(key, value);
    } catch(e) {
        // 戻り値は任意
        return  false;
    }
}

function getItem(key) {
    try {
        localStorage.getItem(key);
    } catch(e) {
        // 戻り値は任意
        return  false;
    }
}

setItem('hoge', 'fuga');
let item = getItem('hoge');
if (!item) {
    console.log(item); // false
} else {
    console.log(item); // fuga
}
19
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?