Почему при доступе к объекту localStorage в Internet Explorer возникает ошибка?

Я работаю над проблемой клиента, из-за которой Modernizr неожиданно не обнаруживает поддержку объекта localStorage в Internet Explorer 9. Моя страница правильно использует тип документа HTML 5 (<!DOCTYPE html>), а инструменты разработчика сообщают, что страница имеет режим браузера IE9 и Режим документа стандартов IE9, поэтому я ожидаю, что это сработает.

Я выполнил отладку следующего блока try/catch в Modernizr и обнаружил, что при доступе к объекту localStorage возникает ошибка JavaScript.

tests['localstorage'] = function() {
    try {
        localStorage.setItem(mod, mod);
        localStorage.removeItem(mod);
        return true;
    } catch(e) {
        return false;
    }
};

На некоторых машинах сообщение об ошибке JavaScript имеет вид The system cannot find the file specified.. На других это просто Invalid argument., и Internet Explorer блокируется ровно на 5 минут, прежде чем выдает ошибку.

Почему при доступе к объекту localStorage здесь в Internet Explorer возникает ошибка?


person Simon Lieschke    schedule 15.11.2012    source источник


Ответы (2)


Я обнаружил, что поддомен самого низкого уровня соответствует одному из зарезервированных имен устройств, как описано на странице Ограничения на маску файла и свойства имени файла в Internet Explorer, то доступ к объекту localStorage вызовет ошибку.

Эта проблема, вероятно, возникает из-за того, что внутри Internet Explorer пытается получить доступ к файловой системе, используя зарезервированное имя устройства при доступе к объекту localStorage, чтобы удовлетворить Storage шагов инициализации объекта.

Это, конечно, крайний случай, но если ваша страница поступает с сервера, чей поддомен самого низкого уровня точно соответствует любому из con, prn, aux, clock$, nul, com1, com2, com3, com4, com5, com6, com7, com8, com9, lpt1, lpt2, lpt3, lpt4, lpt5, lpt6, lpt7, lpt8 или lpt9 (например, http://prn.example.com), то это вполне может быть причиной, по которой вы видите эту проблему.

Выбор поддомена более низкого уровня, который не был зарезервированным именем устройства, в этой ситуации решил проблему.

person Simon Lieschke    schedule 15.11.2012
comment
Это был многословный, сложный ответ на ваш собственный вопрос, который был задан всего за 1 минуту до... - person kinakuta; 15.11.2012
comment
@kinakuta Вы подразумеваете, что ответ уже был написан, когда вопрос был опубликован? По-прежнему не подразумевает злого умысла, просто желание поделиться. - person John Dvorak; 15.11.2012
comment
@JanDvorak ничего не сказал о том, что это злонамеренно. Я не возражаю, если люди захотят поделиться, но просто кажется любопытным, если это не представлено таким образом. - person kinakuta; 15.11.2012
comment
Да, у меня действительно был хороший ответ, когда я разместил вопрос. Конечно, это очень крайний случай, но, надеюсь, однажды это спасет кого-то еще с точно такой же проблемой! :) - person Simon Lieschke; 15.11.2012
comment
Кто-нибудь сообщил об этой проблеме в Microsoft? Это звучит как ошибка высокой степени серьезности для меня. - person claudiopro; 20.07.2015

Мы столкнулись с похожей проблемой, потому что запустили CCleaner на машине.

Решать:

Свойства обозревателя -> История просмотров -> Удалить:

Обязательно проверьте все параметры, кроме самого первого (Сохранить данные избранного веб-сайта).

Мы смогли исправить, затем воспроизвести эту проблему, снова используя CCleaner, а затем снова исправить.

Перейдите на этот сайт для получения дополнительной информации: http://grekai.wordpress.com/2013/02/24/localstorage-the-system-cannot-find-the-path-specified/

person leojh    schedule 22.05.2013