Восстановление работоспособности JavaScript после Exception в xhtml
Привет всем!
Такая задача:
Для решения поставленной задачи я пробовал использовать вставку через innerHTML и перехват ошибок, через try{ ... } catch (e) { ... }. Проблемой оказалось то, что после возникновения хоть одной ошибки дальнейшая работа скрипта становится невозможной. Exception выдается даже на корректный код, вставленный совершенно в иной тэг. Код:
Component returned failure code: 0x80004003 (NS_ERROR_INVALID_POINTER) [nsIDOMNSHTMLElement.innerHTML] Чтобы было понятнее, вот пример тестового кода (запускать его надо обязательно только в режиме xhtml): <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head><title>Test</title></head> <body> <p id="test"></p> <script type="text/javascript"> <!--//--><![CDATA[//><!-- var d = document.createElement("div"); var x = document.getElementById("test"); try { d.innerHTML = "Try to insert <" + "b>incorrect<" + "b> HTML-code"; alert("ok!") } catch (e) { alert(e.name + ": " + e.message); } try { x.innerHTML = "Try to insert <" + "b>correct</" + "b> HTML-code"; alert("ok!") } catch (e) { alert(e.name + ": " + e.message); } //--><!]]> </script> </body></html> Насколько я понимаю, здесь после ошибки где-то выставляется флаг, который необходимо потом сбросить. Где и какой? Я перерыл сегодня горы документации - найти не могу... |
Может я чего не понял, но у меня данный код отлично отработал...
|
ZoNT,
Он работает в "режиме HTML", но в "режиме XHTML" - он во второй раз тоже выдает эксепшн, даже при правильном HTML-коде. Заголовок должен быть не: 'Content-type: text/html;' а: 'Content-type: application/xhtml+xml;' |
А что в режиме XHTML innerHTML делает?
|
Kolyaj,
Хм. Я понимаю вопрос. Согласно стандарту, innerHTML не должно быть в XHTML, но тот же Firefox начиная с версии 2.0 поддерживает такую вставку. И, я думаю, это правильно, т.к. при загрузке фрагментов HTML-кода через AJAX - это будет самый удобный способ вставки. Иначе надо придумывать очень сложный способ парсинга кода и вставки его через DOM. Зачем изобретать велосипед? Задача парсинга будет тем более сложная, учитывая что код может быть не корректным, как в моем примере. Kolyaj, Или Вы хотите сказать, что в связи с тем, что innerHTML здесь "не родной", то если такой эксепшен один раз возник, то дальнейшая работа с innerHTML уже будет не возможна? |
no_alex,
я точно не знаю, xhtml-фанатизмом не страдаю. Просто это из серии "и рыбку съесть...". Используете строгий XHTML, но при этом же используете innerHTML. А зачем XHTML? Тем более IE не поддерживает его. |
Kolyaj,
Просто у меня задача стоит несколько специфическая. Мне IE, как таковой не нужен. Это проект "для внутреннего пользования". XHTML мне как раз удобно использовать в силу других обстоятельств, но не удобно, что после каждого эксепшена приходится F5 давить. |
Цитата:
|
Kolyaj,
Ну надо мне, надо!... ;) Считайте эту задачу академической. Есть флаг ошибки или нет? И если есть - как его сбросить? |
Конечно есть, в спецификации XML. При первой же ошибке прекращать дальнейший парсинг.
|
Часовой пояс GMT +3, время: 14:36. |