Подтвердить что ты не робот

INVALID_STATE_ERR: исключение DOM 11 (WebKit)

Недавно я тестировал приложение Cappuccino, с которым я работал в Chrome и Safari. Я получаю сообщение об ошибке:

INVALID_STATE_ERR: DOM Exception 11: An attempt was made to use an object that is not, or is no longer, usable.

Отсутствие информации разочаровывает. Какой объект и где я попытался его использовать? Chrome пытается ответить на второй вопрос, но номер строки, который он дает, 465, ничего не значит, когда файл, который он дает, составляет всего 94 строки. Без дополнительной информации я даже не знаю, с чего начать.

4b9b3361

Ответ 1

Chrome canary предлагает трассировку стека для исключений DOM!

Ответ 2

Обычно эта ошибка возникает с XMLHttpRequest, когда вы вызываете открытый метод с помощью async = true или вы оставляете параметр async undefined, поэтому он по умолчанию имеет асинхронный характер, а затем вы получаете доступ к свойствам status или responseText. Эти свойства доступны только после синхронного вызова или готовности ReadyState (после ответа асинхронного вызова). Я предлагаю вам сначала попробовать с async = false, а затем переключиться на то, что это правда, и использовать onReadyStateChange.

Ответ 3

В моем случае я устанавливал заголовки перед открытием соединения. Чтобы предотвратить эту ошибку, заголовки должны быть установлены после открытия соединения:

var fd = new FormData();
fd.append("fileToUpload", file);
var xhr = new XMLHttpRequest();
xhr.open("POST", postUrl, true);
xhr.setRequestHeader("cache-control", "no-cache");
xhr.send(fd);

Я понимаю, что этот ответ специфичен для моей проблемы, а не для общего сообщения INVALID_STATE_ERR: DOM Exception 11, но решил, что я отправлю свое решение здесь для следующего человека.

Ответ 4

Это также может произойти, когда Javascript пытается document.write() перейти на страницу XHTML (Content-Type: application/xhtml+xml).

Ответ 5

Эта ошибка также возникает при попытке изменить свойство value объекта <input type="file"

Это проверка безопасности.

Ответ 6

Во-первых, я действительно не знаю ничего из Каппучино или того, что вы пытаетесь сделать. Но я видел это при работе с объектами Qt WebKit и JavaScript. Это произошло после того, как объект окна javascript был очищен, например. если я не загрузил свои собственные объекты JS в WebKit после загрузки новой страницы.

Это в основном означает, что вы пытаетесь использовать внутренне удаленный объект JavaScript.

Ответ 7

В этом случае я считаю, что проблема связана с попыткой нарисовать изображения на холсте с использованием заливки шаблона с не полностью загруженным изображением. Этот вопрос был связан с Cappuccino issue 811, и мои рассуждения основаны на aparajita's, чтобы убедиться, что изображение загружено, прежде чем пытаться использовать его в качестве заливки шаблона.

Тем не менее, эта ошибка разочаровывает непрозрачность, учитывая, что ключевой фрагмент информации (какой объект был вызван) не является очевидным, и места, в которых он может возникать, варьируются.

Ответ 8

Оба Chrome и Safari встроены в отладчики. Убедитесь, что вы используете файл index-debug.html, чтобы запустить приложение, чтобы получить удобный для чтения код.

В Safari перейдите в раздел "Настройки" и активируйте меню "Разработчик". Затем перейдите в раздел "Разработка" > "Начать отладку JavaScript". Используйте значок паузы в левом нижнем углу, чтобы установить отладчик на паузу при ошибках. В следующий раз, когда вы столкнетесь с проблемой, отладчик остановится в строке нарушения и покажет вам, как он попал туда через трассировку стека.

Ответ 9

Я видел это, когда пытаюсь динамически писать элемент input[type="file"] с его набором атрибутов value.

Когда я удалил value attr из того, что я вводил, все это сработало.

В некотором смысле, я вижу эту ошибку как значение "вы пытались сделать то, что спецификация не позволяет" на основе этой статьи здесь - http://designbyjeeba.blogspot.com/2011/04/dreaded-invalidstateerr-dom-exception.html

Ответ 10

Я хотел бы добавить к этому. Получил эту ошибку на Samsung S4 и S5, используя браузер запаса.

На моей стороне это было вызвано попыткой воспроизведения аудиофайла, который еще не загружен.

Этот вопрос SO охватывает ту же проблему: DOM Exception 11

Ответ 11

Эта проблема возникла для меня, потому что я использовал Audio API следующим образом:

let someAudio = new Audio(file);
someAudio.play();
someAudio.pause();

Но это неверно, потому что функция play() является асинхронной. Вместо этого вам нужно использовать функцию then возвращенного обещания.

someAudio.play().then(() => someAudio.pause());

Возвращаемое значение: Обещание, которое выполняется при запуске воспроизведения, или отклоняется, если по какой-либо причине воспроизведение невозможно запустить. MDN