ローカル・ファイルでwindow.localStorageが動かないので、簡単なテスト用にどうにかするもの

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の存在確認にもいろいろあるので、このようなコードが必要になった。動かすだけは動かせるものの、保存されるわけではないので、完全には動作確認できないが、ダーク・モードの切り替え程度に使うだけなら十分だと思う。クッキーを代わりに使ったりなどするくらいなら、素直にローカル・サーバーを立てて確認するべきだろう。