Obiekt JavaScript localStorage złamany w IE11 w systemie Windows 7
ThelocalStorage
obiekt w programie Internet Explorer 11 (kompilacja systemu Windows 7) zawiera reprezentacje łańcuchowe niektórych funkcji zamiast wywołań rodzimych, jak można by oczekiwać.
To zrywa tylko z waniliowym JavaScriptem, a witryny takie jak JSFiddle nie mają problemu z tym kodem, ale podejrzewam, że tak jestlocalStorage
wypełnienia na miejscu, które to poprawiają.
Weź ten kod strony HTML na przykład:
<!DOCTYPE html>
<script>
localStorage.setItem('test', '12345');
alert(localStorage.getItem('test'));
localStorage.clear();
</script>
Działa to doskonale we wszystkich moich zainstalowanych przeglądarkach z wyjątkiem IE11. Błąd występuje w pierwszej linii ”SCRIPT5002: oczekiwana funkcja”
Spójrz na typsetItem
funkcja jest rzeczywiście w konsoli narzędzi programistycznych IE, stwierdza, że jest to ciąg ...?
typeof localStorage.setItem === 'string' // true
Drukowanie ciągu znaków dlasetItem
wyświetla następujące informacje:
"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 ciągami znaków, na przykład odpowiednimigetItem
funkcja jest rzeczywiście funkcją i działa zgodnie z oczekiwaniami.
typeof localStorage.getItem === 'function' // true
Zmiana trybu dokumentu (emulacji) na 10 lub 9 nadal nie rozwiązuje problemu i oba powodują ten sam błąd. Zmiana trybu dokumentu na 8 daje następujący błąd ”Obiekt nie obsługuje tej właściwości lub metody'Oczekuje się, ponieważ IE8 nie obsługujelocalStorage
.
Czy ktoś inny ma ten sam problem z IE11 na Windows 7, gdzielocalStorage
obiekt wydaje się „uszkodzony / uszkodzony”?