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'?
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 .
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).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ł.
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