web-dev-qa-db-ja.com

ファイルシステムからWebサイトに直接アクセスすると、IE9のローカルストレージが失敗する

両方のステートメントwindow['localStorage']およびwindow.localStorage

uRL「file:/// C:/index.html」にアクセスするときは未定義です

ファイルシステムでWebサイトを実行しているとき、localStorageは立ち入り禁止ですか?

PS。 IsolatedStorageでWebサイトをホストしているWindows 7の電話でWebサイトを実行しています。

21
DevNull

はい、IE9はローカルファイルのlocalStorageをサポートしていません。私が見つけることができる公式ドキュメントにはありませんが、同じ問題は このブログで説明されています です。

外部でWebサイトをホストするか、データを保持する他の方法を見つける必要があります。 [とにかく、HTML5スタイルのローカルストレージのサポートは、多くのブラウザでまだベータ版です。特にローカルファイルシステムのページの場合。]

MicrosoftがInternet Explorer用に開発したW3C以前のソリューションであるuserdataの動作を試すことができます。ただし、ローカルファイルシステムをサポートしているかどうかは不明です。リンク:

  1. http://www.javascriptkit.com/javatutors/domstorage2.shtml
  2. http://msdn.Microsoft.com/en-us/library/ms531424(VS.85).aspx

参照:

  1. https://bugzilla.mozilla.org/show_bug.cgi?id=507361
  2. https://stackoverflow.com/a/7377302/1122351
23
benesch

追加のボーナスとして、IEは、この問題を回避するすべての試みを無効にします。

正気なことは、独自のダミーlocalStorageをスタブ化して、少なくともローカルファイルシステムからロードしたときに壊れないようにすることです。

if (document.all && !window.localStorage)
{
    window.localStorage = {};
    window.localStorage.removeItem = function () { };
}

それを実行した後にどのアラート(window.localStorage)がポップアップするかについての推測はありますか? 「未定義」と思いましたか???

ありがとう、IE!現在、これを機能させるために実行できる醜いハックが1つあります。 IEでは予約語「localStorage」を再利用できないため、全体を別の場所に移動します。

window.localStorageAlias = window.localStorage;
if (document.all && !window.localStorage)
{
    window.localStorageAlias = {};
    window.localStorageAlias.removeItem = function () { };
}

つまり、通常はlocalStorage ['beans'] = 7と言う場所であれば、localStorageAlias ['beans'] = 7を実行するだけでビジネスに復帰できます。当然、IEは実際にはstoreにはなりませんが、ローカルファイルシステムから実行している場合、セッション間には何もありませんが、少なくとも壊れることはありません。

追加のクレジットとして、上記のコードを修正して、ローカルで実行するときにIEが実際にseになる永続ストレージの何らかの形式でスワップするようにできます。

5
Jason Kester

私は同じ問題を抱えており、フォールバックソリューションを備えた2つのプラグインを見つけました:

https://github.com/andris9/jStorage

HTML5ローカルストレージフォールバックソリューション

最初の方が小さくてシンプルなので、もう1つ好きです。

1
PiTheNumber