локальное хранилище в IE9 не работает, когда веб-сайт доступен напрямую из файловой системы - PullRequest
21 голосов
/ 03 января 2012

Оба заявления window['localStorage'] и window.localStorage

не определены при обращении к URL "file: /// C: /index.html"

Запрещено ли использование localStorage при запуске веб-сайтов в файловой системе?

PS. Я запускаю веб-сайт на телефоне под управлением Windows 7 и размещаю его в изолированном хранилище.

Ответы [ 3 ]

23 голосов
/ 03 января 2012

Да, IE9 не поддерживает localStorage для локальных файлов.Не в какой-либо официальной документации, которую я могу найти, но та же проблема описана в этом блоге .

Вам придется либо разместить сайт снаружи, либо найти какой-то другой способ сохраненияданные.[Во всяком случае, поддержка локального хранилища в стиле HTML5 все еще находится на стадии бета-тестирования.Особенно для страниц в локальной файловой системе.]

Вы можете попробовать поведение пользовательских данных, которое является решением до W3C, разработанным Microsoft для Internet Explorer.Не уверен, поддерживает ли он локальные файловые системы.Ссылки:

  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
5 голосов
/ 04 сентября 2012

В качестве дополнительного бонуса IE откажется от любой попытки обойти эту проблему.

Разумная вещь, которую нужно сделать, - это заглушить свой собственный фиктивный localStorage, чтобы, по крайней мере, ваша вещь не сломаласьпри загрузке из локальной файловой системы:

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

Есть какие-нибудь предположения относительно того, какое предупреждение (window.localStorage) появится после запуска этого?Вы догадались "неопределенный" ???

Спасибо, IE!Теперь есть один уродливый взлом, который мы можем сделать, чтобы сделать эту работу.Поскольку IE не позволит вам повторно использовать его зарезервированное слово «localStorage», мы просто перенесем все это в другое место:

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

Так что теперь, где бы вы ни говорили, вы обычно говорите localStorage ['beans'] = 7, вы просто делаете localStorageAlias ​​[' beans '] = 7 и возвращаетесь в бизнес.Естественно, IE фактически не будет хранить ничего между сеансами при запуске из локальной файловой системы.Но, по крайней мере, он не сломается.

За дополнительную плату вы можете исправить приведенный выше код для замены в какой-либо форме постоянного хранилища, которое IE на самом деле будет использовать при локальном запуске.

1 голос
/ 06 февраля 2012

У меня та же проблема, и я нашел два плагина с альтернативными решениями:

https://github.com/andris9/jStorage

Резервные решения для локального хранилища HTML5

Мне больше нравится первый, потому что он меньше и проще.

...