プライベートブラウズ中はlocalStrage/sessionStrageが利用できない問題を修正

Webアプリで便利なlocalStrage/sessionStrageですが、最近色々なブラウザに搭載されているプライベートブラウズでは、これらの利用がブロックされています。

getItemでもsetItemでも、使おうとするとエラー(QUOTA_EXCEEDED_ERR)になってしまうようです。

iOS5で追加されるPrivate BrowsingモードとWebStorageの兼ね合い ::ハブろぐ

その時点でスクリプトが停止しても問題なければ放っておいてもいいかもしれませんが、そうでない場合は事前にWebStrageが使用可能かどうかをチェックしてから使用するように、条件分岐しなくてはなりません。

プライベートブラウズかどうかをチェックする方法は、それこそWebStrageがエラーを吐かないかどうかで見るしかないようです。

function checkSessionStorage() {
	if (!window.sessionStorage) return false;
	try {
		window.sessionStorage.setItem('key', 1);
		return true;
	} catch (error) {
		return false;
	}
}

こんな感じでsessionStrageが効くかどうかをチェックして、フラグを立てるなりすると良いかと思います。

iconDecotterはノーチェックでlocalStrage/sessionStrageを使っていたので、長いこと多分このエラーが出ていたと思います。先日、iOS7で検証しようと思って色々やっていた時に、プライベートブラウズになっている時に挙動がおかしいことに気づいてこのことを知りました。
今は、WebStrageの扱いについてはエラーが発生しないように修正してあります。

コメント

タイトルとURLをコピーしました