window.localStorage
が実装されているブラウザーでは、セキュリティー上の制限により、ローカル・ファイルでは参照するとUncaught DOM Exceptionを返す。普通のポリフィルのように、それらしきものを作ってやっても、Uncaught DOM Exceptionを返すのは変わらない。いったんdelete window.localStorage
してから、らしきものを作ってやるとうまくいく。
try {
const test = "__test__";
localStorage.setItem(test, test);
localStorage.removeItem(test);
} catch (e) {
delete window.localStorage;
window.localStorage = {
_data: {},
clear() {
return (this._data = {});
},
getItem(key) {
return this._data[key];
},
removeItem(key) {
return delete this._data[key];
},
setItem(key, value) {
return (this._data[key] = String(value));
}
};
}
window.localStorage
の存在確認にもいろいろあるので、このようなコードが必要になった。動かすだけは動かせるものの、保存されるわけではないので、完全には動作確認できないが、ダーク・モードの切り替え程度に使うだけなら十分だと思う。クッキーを代わりに使ったりなどするくらいなら、素直にローカル・サーバーを立てて確認するべきだろう。