Объект localStorage
в Internet Explorer 11 (сборка Windows 7) содержит строковые представления определенных функций вместо обычных вызовов, как и следовало ожидать.
Это только ломается с ванильным JavaScript и сайты, такие как JSFiddle, не имеют проблемы с этим кодом, но я подозреваю, потому что есть localStorage
полиполки, которые исправляют его.
Возьмите этот код HTML-страницы, например:
<!DOCTYPE html>
<script>
localStorage.setItem('test', '12345');
alert(localStorage.getItem('test'));
localStorage.clear();
</script>
Это отлично работает во всех моих установленных браузерах, кроме IE11. Ошибка в первой строке SCRIPT5002: ожидаемая функция.
Взглянув на то, какой тип функции setItem
на самом деле находится в консоли инструментов разработчика IE, указывает, что это строка...?
typeof localStorage.setItem === 'string' // true
Распечатка строки для setItem
отображает следующее:
"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;
}"
Как ни странно, не все функции были заменены на строки, например, соответствующая функция getItem
действительно является функцией и работает как ожидалось.
typeof localStorage.getItem === 'function' // true
Изменение режима документа (эмуляции) до 10 или 9 по-прежнему не устраняет проблему, и оба они приводят к той же ошибке. Изменение режима документа на 8 приводит к следующей ошибке: " Объект не поддерживает это свойство или метод", который ожидается, поскольку IE8 не поддерживает localStorage
.
Есть ли у кого-то еще одна проблема с IE11 в Windows 7, где объект localStorage
кажется "сломанным/поврежденным"?