Lösung für Firefox Benutzer deaktivieren Cookies und somit localStorage - Polyfill nicht möglich

9

Nach einer Beschwerde von einem unserer Benutzer und einigen Tests scheint es, dass Firefox 15 und 16 (und wahrscheinlich ältere Version) es so machen, wenn Sie Cookies deaktivieren, deaktivieren Sie auch localStorage. Sie können nicht einmal ein Polyfill dafür erstellen, wenn Sie versuchen, auf window.localStorage zuzugreifen, erhalten Sie Error: The operation is insecure.

Wenn Sie einen try catch werfen, können Sie prüfen, ob er deaktiviert ist, aber Sie können die Variable nicht durch Ihre eigene Lösung ersetzen. Das folgende schnelle Polyfill wird nicht funktionieren, da FF das Setzen der Variablen ignoriert und beim Versuch, darauf zuzugreifen, den gleichen Fehler auslöst:

%Vor%

Die einzige Lösung scheint die "falsche" localStorage auf eine andere Variable zu verschieben, aber das wäre ärgerlich, da wir viel Code und eine js lib haben, die auf den Zugriff auf diese Variable angewiesen sind. Irgendwelche Lösungen?

Bearbeiten: Es ist nicht optimal, nur eine Warnmeldung anzuzeigen, um den Benutzern mitzuteilen, dass Cookies erforderlich sind. Wenn Besucher die Website nur ansehen und sich nicht anmelden möchten, benötigen sie wirklich keine Cookies. Aber als backbone.js Anwendung und Weitergabe von vielen Daten, speichern wir Sachen in localStorage ziemlich viel.

    
Mauvis Ledford 09.10.2012, 17:44
quelle

3 Antworten

1

Da localStorage eine reservierte Variable ist, haben Sie keine andere vernünftige Option, als einen Wrapper mit einem anderen Namen zu verwenden. Wickeln Sie Ihren eigenen Code und das echte localStorage unter dieser Variable und ersetzen Sie localStorage durch den Namen Ihres Wrappers. Ärgerlich, aber weniger ärgerlich als Veränderungen zu verlieren.

    
Ast Derek 22.06.2013 18:40
quelle
1
___ answer12838533 ___

Wir verwenden dies als unsere lib für den lokalen Speicher.

%Vor%

Sie können leicht Testcode hinzufügen, um auf ein nicht persistentes Array zurückzugreifen.

    
___ tag123javascript ___ JavaScript (nicht zu verwechseln mit Java) ist eine dynamische Sprache mit mehreren Paradigmen auf hoher Ebene, die sowohl für das clientseitige als auch für das serverseitige Scripting verwendet wird. Verwenden Sie dieses Tag für Fragen zu ECMAScript und seinen verschiedenen Dialekten / Implementierungen (außer ActionScript und Google-Apps-Script). ___ tag123firefox ___ Mozilla Firefox ist ein kostenloser, plattformübergreifender Open-Source-Webbrowser. Verwenden Sie dieses Tag, wenn Ihre Frage mit der Funktionsweise von Firefox im Zusammenhang steht oder sich auf Code bezieht, der nicht mit Firefox funktioniert und in anderen Browsern funktioniert. Fragen zur Firefox-Add-On-Entwicklung sollten mit [firefox-addon] getaggt werden. Wenn Sie in Ihrer Frage Firefox zum Surfen verwenden (z. B. als Endbenutzer), sollten Sie stattdessen Ihre Frage zu Super User stellen. ___ tag123localstorage ___ LocalStorage ist eine Möglichkeit, persistente Daten mit JavaScript zu speichern (siehe auch: SessionStorage). ___ answer17254117 ___

Da %code% eine reservierte Variable ist, haben Sie keine andere vernünftige Option, als einen Wrapper mit einem anderen Namen zu verwenden. Wickeln Sie Ihren eigenen Code und das echte localStorage unter dieser Variable und ersetzen Sie %code% durch den Namen Ihres Wrappers. Ärgerlich, aber weniger ärgerlich als Veränderungen zu verlieren.

    
___ qstntxt ___

Nach einer Beschwerde von einem unserer Benutzer und einigen Tests scheint es, dass Firefox 15 und 16 (und wahrscheinlich ältere Version) es so machen, wenn Sie Cookies deaktivieren, deaktivieren Sie auch localStorage. Sie können nicht einmal ein Polyfill dafür erstellen, wenn Sie versuchen, auf %code% zuzugreifen, erhalten Sie %code%

Wenn Sie einen try catch werfen, können Sie prüfen, ob er deaktiviert ist, aber Sie können die Variable nicht durch Ihre eigene Lösung ersetzen. Das folgende schnelle Polyfill wird nicht funktionieren, da FF das Setzen der Variablen ignoriert und beim Versuch, darauf zuzugreifen, den gleichen Fehler auslöst:

%Vor%

Die einzige Lösung scheint die "falsche" localStorage auf eine andere Variable zu verschieben, aber das wäre ärgerlich, da wir viel Code und eine js lib haben, die auf den Zugriff auf diese Variable angewiesen sind. Irgendwelche Lösungen?

Bearbeiten: Es ist nicht optimal, nur eine Warnmeldung anzuzeigen, um den Benutzern mitzuteilen, dass Cookies erforderlich sind. Wenn Besucher die Website nur ansehen und sich nicht anmelden möchten, benötigen sie wirklich keine Cookies. Aber als backbone.js Anwendung und Weitergabe von vielen Daten, speichern wir Sachen in localStorage ziemlich viel.

    
___ qstnhdr ___ Lösung für Firefox Benutzer deaktivieren Cookies und somit localStorage - Polyfill nicht möglich ___ antwort18130584 ___

Sie haben zwei Möglichkeiten:

1) Nutzen Sie die Vorteile des lexikalischen Scopings und die Funktionsweise von Lookups ... Wenn Ihr Code beispielsweise in einer Closure ausgeführt wird, können Sie innerhalb dieser Closure Folgendes ausführen:

%Vor%

Verwenden Sie dann innerhalb Ihres Codes nur localStorage anstelle des vollqualifizierten window.localStorage. Der Vorteil hier ist nur die Art und Weise, wie lexikalische Variablen-Lookups funktionieren. Es wird eher Ihre "engere" Scoped-Version als die globale finden. PS ... du solltest wahrscheinlich sowieso in einem Verschluss laufen, damit das möglich sein sollte.

2) nur Variable umbenennen, ähnlich wie die umgekehrte, was Menschen tun, um Vendor-Präfixe zu entfernen.

%Vor%

Dann ändern Sie einfach Ihren Code, um pLocalStorage anstelle von localStorage zu verwenden ... wenn ihr Browser dies unterstützt, wird es das native, sonst das polyfill verwenden.

    
___
Nick Sharp 08.08.2013 15:53
quelle
0

Wir verwenden dies als unsere lib für den lokalen Speicher.

%Vor%

Sie können leicht Testcode hinzufügen, um auf ein nicht persistentes Array zurückzugreifen.

    
DeMeNteD 11.10.2012 11:32
quelle