| 
	| 
	
	| 
		
	| 
			
			 
			
				25.11.2008, 02:17
			
			
			
		 |  
	| 
		
			
			| Аспирант       |  | 
					Регистрация: 20.08.2008 
						Сообщений: 56
					 
		
 |  |  
	| 
				Восстановление работоспособности JavaScript после Exception в xhtml
			 Привет всем! 
Такая задача: Работаем только с XHTML, например, в Firefox.Необходимо вставить HTML-код, например, полученный через AJAX, внутрь какого-либо тега.Есть вероятность, что полученный код может оказаться некорректным - соответственно в этом случае выдаем сообщение об ошибке, некорректный код пропускаем и продолжаем работу дальше.
 
Для решения поставленной задачи я пробовал использовать вставку через 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>
Насколько я понимаю, здесь после ошибки где-то выставляется флаг, который необходимо потом сбросить. Где и какой? Я перерыл сегодня горы документации - найти не могу...
			
			
	
			
			
			
			
			
				  |  |  
	| 
		
	| 
			
			 
			
				25.11.2008, 11:48
			
			
			
		 |  
	| 
		
			
			| Флудер       |  | 
					Регистрация: 25.07.2008 
						Сообщений: 1,271
					 
		
 |  |  
	| Может я чего не понял, но у меня данный код отлично отработал... |  |  
	| 
		
	| 
			
			 
			
				25.11.2008, 12:30
			
			
			
		 |  
	| 
		
			
			| Аспирант       |  | 
					Регистрация: 20.08.2008 
						Сообщений: 56
					 
		
 |  |  
	| ZoNT,Он работает в "режиме HTML", но в "режиме XHTML" - он во второй раз тоже выдает эксепшн, даже при правильном HTML-коде.
 
 Заголовок должен быть не:
 'Content-type: text/html;'
 а:
 'Content-type: application/xhtml+xml;'
 |  |  
	| 
		
	| 
			
			 
			
				25.11.2008, 12:40
			
			
			
		 |  
	| 
		
			
			| Новичок на форуме       |  | 
					Регистрация: 19.02.2008 
						Сообщений: 9,177
					 
		
 |  |  
	| А что в режиме XHTML innerHTML делает? |  |  
	| 
		
	| 
			
			 
			
				25.11.2008, 14:08
			
			
			
		 |  
	| 
		
			
			| Аспирант       |  | 
					Регистрация: 20.08.2008 
						Сообщений: 56
					 
		
 |  |  
	| Kolyaj,Хм. Я понимаю вопрос.
 Согласно стандарту, innerHTML не должно быть в XHTML, но тот же Firefox начиная с версии 2.0 поддерживает такую вставку.
 И, я думаю, это правильно, т.к. при загрузке фрагментов HTML-кода через AJAX - это будет самый удобный способ вставки. Иначе надо придумывать очень сложный способ парсинга кода и вставки его через DOM. Зачем изобретать велосипед?
 Задача парсинга будет тем более сложная, учитывая что код может быть не корректным, как в моем примере.
 
 Kolyaj,
 Или Вы хотите сказать, что в связи с тем, что innerHTML здесь "не родной", то если такой эксепшен один раз возник, то дальнейшая работа с innerHTML уже будет не возможна?
 |  |  
	| 
		
	| 
			
			 
			
				25.11.2008, 14:32
			
			
			
		 |  
	| 
		
			
			| Новичок на форуме       |  | 
					Регистрация: 19.02.2008 
						Сообщений: 9,177
					 
		
 |  |  
	| no_alex,я точно не знаю, xhtml-фанатизмом не страдаю. Просто это из серии "и рыбку съесть...". Используете строгий XHTML, но при этом же используете innerHTML. А зачем XHTML? Тем более IE не поддерживает его.
 |  |  
	| 
		
	| 
			
			 
			
				25.11.2008, 14:50
			
			
			
		 |  
	| 
		
			
			| Аспирант       |  | 
					Регистрация: 20.08.2008 
						Сообщений: 56
					 
		
 |  |  
	| Kolyaj,Просто у меня задача стоит несколько специфическая.
 Мне IE, как таковой не нужен. Это проект "для внутреннего пользования".
 XHTML мне как раз удобно использовать в силу других обстоятельств, но не удобно, что после каждого эксепшена приходится F5 давить.
 |  |  
	| 
		
	| 
			
			 
			
				25.11.2008, 15:35
			
			
			
		 |  
	| 
		
			
			| Новичок на форуме       |  | 
					Регистрация: 19.02.2008 
						Сообщений: 9,177
					 
		
 |  |  
	| 
	
 
	| Сообщение от no_alex |  
	| XHTML мне как раз удобно использовать в силу других обстоятельств |  
	
 Каких? Мне для общего развития. |  |  
	| 
		
	| 
			
			 
			
				25.11.2008, 15:47
			
			
			
		 |  
	| 
		
			
			| Аспирант       |  | 
					Регистрация: 20.08.2008 
						Сообщений: 56
					 
		
 |  |  
	| Kolyaj, 
 Ну надо мне, надо!...    
Считайте эту задачу академической. 
Есть флаг ошибки или нет? И если есть - как его сбросить? |  |  
	| 
		
	| 
			
			 
			
				25.11.2008, 15:54
			
			
			
		 |  
	| 
		
			
			| Новичок на форуме       |  | 
					Регистрация: 19.02.2008 
						Сообщений: 9,177
					 
		
 |  |  
	| Конечно есть, в спецификации XML. При первой же ошибке прекращать дальнейший парсинг. |  |  |  |