Obiekt localStorage JavaScript uszkodzony w IE11 w Windows 7

Obiekt localStorage w przeglądarce Internet Explorer 11 (Windows 7 build) zawiera reprezentacje znaków określonych funkcji zamiast natywnych wywołań, jak można się spodziewać.

To tylko zrywa z vanilla JavaScript i strony takie jak JSFiddle nie mają problemu z tym kodem, ale podejrzewam, że to dlatego, że istnieją localStorage polyfills w miejscu, które go poprawiają.

Weź ten kod HTML strony na przykład:

<!DOCTYPE html>
<script>
  localStorage.setItem('test', '12345');
  alert(localStorage.getItem('test'));
  localStorage.clear();
</script>

To działa doskonale we wszystkich moich zainstalowanych przeglądarkach z wyjątkiem IE11. Błąd występuje w pierwszej linii 'SCRIPT5002: oczekiwana funkcja'.

Przyjrzenie się, jakiego typu Funkcja setItem faktycznie znajduje się w konsoli IE developer tools, stwierdza, że jest to ciąg znaków...?

    typeof localStorage.setItem === 'string' // true

Drukowanie ciągu setItem wyświetla:

"function() {
var result;
callBeforeHooks(hookSite, this, arguments);
try {
result = func.apply(this, arguments);
} catch (e) {
callExceptHooks(hookSite, this, arguments, e);
throw e;
} finally {
callAfterHooks(hookSite, this, arguments, result);
}
return result;
}"

Co dziwne, nie wszystkie funkcje zostały zastąpione łańcuchami, na przykład odpowiadająca im funkcja getItem jest rzeczywiście funkcją i działa jako oczekiwane.

    typeof localStorage.getItem === 'function' // true

Zmiana trybu dokumentu (emulacja) na 10 lub 9 nadal nie rozwiązuje problemu i oba powodują ten sam błąd. Zmiana trybu dokumentu na 8 powoduje następujący błąd 'Obiekt nie obsługuje tej właściwości ani metody' co jest oczekiwane, ponieważ IE8 nie obsługuje localStorage.

Czy ktoś jeszcze ma ten sam problem z IE11 w Windows 7 gdzie obiekt localStorage wydaje się 'uszkodzony/uszkodzony'?

Author: BrutalDev, 2014-01-16

3 answers

Okazuje się, że jest to problem w podstawowej wersji IE11 (11.0.9600.16428) Dla Windows 7 SP1.

Po zainstalowaniu poprawki w celu aktualizacji do wersji 11.0.9600.16476 (aktualizacja w wersji 11.0.2 - KB2898785) problem zostanie rozwiązany. Linki do innych wersji Windows (32-bit itp.) można znaleźć na dole strony patch download page .

 25
Author: BrutalDev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-08 13:33:14

To nie tylko wina IE11.

Prawdopodobnieweinre jest wstrzykiwany do strony. IE11 źle interpretuje przypisania do właściwości localStorage i sessionStorage i konwertuje funkcje Hooka na ciągi znaków, tak jakby były to dane, które mają być przechowywane.

Jest komentarz w Apache / cordova-weinre repo który mówi:

        #In IE we should not override standard storage functions because IE does it incorrectly - all values that set as
        # storage properties (e.g. localStorage.setItem = function()[...]) are cast to String.
        # That leads to "Function expected" exception when any of overridden function is called.
        object[property] = hookedFunction  unless navigator.userAgent.match(/MSIE/i) and (object is localStorage or object is sessionStorage)
Wygląda na to, że to albo Stary wersja WEINRE jest używana, lub ta zmiana nie została oficjalnie wydana ( jest tam od 2013).
 4
Author: sompylasar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-30 19:29:42

Mój localStorage zwrócił niezdefiniowany i nie mogłem zrozumieć dlaczego-dopóki nie zdałem sobie sprawy, że to ponieważ uruchamiałem stronę HTML (ze skryptem localStorage) bezpośrednio z mojego komputera (Plik:///C:/Users/...). Kiedy uzyskałem dostęp do strony z serwera/localhost zamiast tego localStorage został rzeczywiście zdefiniowany i działał.

 1
Author: holm50,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-23 11:28:22