web-dev-qa-db-fra.com

le stockage local dans IE9 échoue lorsque le site Web est accessible directement à partir du système de fichiers

Les deux déclarations window['localStorage'] et window.localStorage

ne sont pas définis lors de l'accès à l'url "file: /// C: /index.html"

LocalStorage est-il hors limites lors de l'exécution de sites Web sur le système de fichiers?

PS. J'exécute le site Web sur un téléphone Windows 7 hébergeant le site Web dans isolatedStorage.

21
DevNull

Oui, IE9 ne prend pas en charge localStorage pour les fichiers locaux. Pas dans la documentation officielle que je peux trouver, mais le même problème est décrit dans ce blog .

Vous devrez soit héberger le site Web en externe, soit trouver une autre méthode de conservation des données. [La prise en charge du stockage local de style HTML5 est toujours en version bêta dans de nombreux navigateurs, de toute façon. Surtout pour les pages du système de fichiers local.]

Vous pouvez essayer les comportements de données utilisateur, qui est une solution antérieure au W3C développée par Microsoft pour Internet Explorer. Je ne sais pas s'il prend en charge les systèmes de fichiers locaux. Liens:

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

Références:

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

En prime, IE supprimera toute tentative de contourner ce problème.

La chose sensée à faire serait de supprimer votre propre localStorage factice afin qu'au moins votre chose ne se casse pas lors du chargement à partir du FileSystem local:

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

Vous devinez quelle alerte (window.localStorage) apparaîtra après avoir exécuté cela? Avez-vous deviné "indéfini" ???

Merci, IE! Maintenant, il y a en fait un vilain hack que nous pouvons faire pour que cela fonctionne. Puisque IE ne vous permettra pas de réutiliser son mot réservé "localStorage", nous allons simplement déplacer le tout vers un autre endroit:

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

Alors maintenant, partout où vous diriez normalement localStorage ['beans'] = 7, vous faites simplement localStorageAlias ​​['beans'] = 7 et vous êtes de retour aux affaires. Naturellement, IE ne va pas réellement stocker quoi que ce soit entre les sessions lors de l'exécution à partir du système de fichiers local. Mais au moins, il ne se cassera pas.

Pour un crédit supplémentaire, vous pouvez corriger le code ci-dessus pour échanger dans une certaine forme de stockage persistant qui IE va réellement tiliser lors de l'exécution locale).

5
Jason Kester

J'ai le même problème et j'ai trouvé deux plugins avec des solutions de secours:

https://github.com/andris9/jStorage

Solutions de secours de stockage local HTML5

J'aime plus le premier car il est plus petit et plus simple.

1
PiTheNumber