Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Критическая ошибка IE / 14 сообщений из 14, страница 1 из 1
20.04.2006, 16:53
    #33680005
dilomakin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Критическая ошибка IE
Уважаемые люди!!!
Помогите, пжалста. Не могу разобраться уже довольно много времени. Проблема вот в чем.
На html-странице имеется рисунок.
К этому рисунку присобачена карта (map).
В один из моментов работы со страницей возникает необходимость обновить рисунок (то бишь средствами JavaScript изменить его src-атрибут).
У рисунка есть обработчик события onreadystatechange, который при значении readyState = 'complete' обновляет карту изображения (через innerHTML элемента map).
После того, как карта обновлена (код трассировал пошагово), происходит выход из функции. Как только работа функции завершается, происходит CRASH, т.е. IE беспардонно сообщает о критической ошибке и вылетает. Может, у кого есть соображения на этот счет? Буду рад любым свежи мыслям. Заранее спасибо.
...
Рейтинг: 0 / 0
21.04.2006, 14:00
    #33682596
dilomakin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Критическая ошибка IE
Эхх-хх.
Совсем ни одного ответа.
Неужели мой случай уникальный?
...
Рейтинг: 0 / 0
21.04.2006, 14:49
    #33682870
Yura Nickolaev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Критическая ошибка IE
Можно попробовать setTimeout() для обновления карты
...
Рейтинг: 0 / 0
21.04.2006, 15:18
    #33682995
dilomakin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Критическая ошибка IE
Геморрой в том, что все вылетает после того, как карта обновлена, и не всегда, а лишь в избранных случаях. Т.е., карта имеет несколько активных точек, тычешь в одну, все отрабатывает как надо, тычешь в другую - та же история, а тычешь в пятую - БУМ, и упал IE. Я в непонятках вообще...
...
Рейтинг: 0 / 0
21.04.2006, 16:05
    #33683189
yelena
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Критическая ошибка IE
Давайте тестовый пример, который бы вылетал по ошибке, тогда будут соображения.
...
Рейтинг: 0 / 0
21.04.2006, 16:17
    #33683235
dilomakin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Критическая ошибка IE
Да нереально это. Там база корпоративная на несколько Гб. Без нее никак все это хозяйство не заработает. Могу привести часть JS + PHP кода.
Так изначально выводится рисунок:
Код: plaintext
1.
2.
3.
4.
5.
while (OCIFetch($sql)) {
	    echo "<div style=\"top: ".(50 + 82 * $i++)."px;\"><img border=\"0\" width=\"".$_GET['width']."\" height=\"41\" src=\"f_bar.php?pf_kod=".substr($id_num, 1, 1)."&pt=".OCIResult($sql, 1)."&width=".$_GET['width']."&start=".$start."&finish=".$finish."\"></div>";
	    echo "<div id=\"pt".OCIResult($sql, 1)."\" style=\"top: ".(50 + 82 * $j++ + 42)."px;\"><img border=\"0\" usemap=\"#map".OCIResult($sql, 1)."\" width=\"".$_GET['width']."\" height=\"41\" onreadystatechange=\"update_maps();\" src=\"p_bar.php?pt=".OCIResult($sql, 1)."&width=".$_GET['width']."&id_num=".$id_num."&start=".$start."&finish=".$finish."&pf_kod=".substr($id_num, 1, 1)."\"></div>";
	    echo "<map name=\"map".OCIResult($sql, 1)."\" id=\"m".OCIResult($sql, 1)."\"></map>";
	}
	OCIFreeStatement($sql);
Так генерится innerHTML карты:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
$file = "maps.tmp";
			if (!file_exists($file )) {
			    touch($file );
				if ($fp = fopen($file , "w")) {
				    fwrite($fp, "<?xml version=\"1. 0 \" ?><maps />");
					fclose($fp);
				}                    
			}
			if ($xml = domxml_open_file($file)) {
			    $root = $xml->document_element();
				$xcont = xpath_new_context($xml);
		        $xpath = xpath_eval($xcont, "/maps/map[@pt=".$_GET['pt']."]");
				if ( 0  == count($xpath->nodeset)) {
				    $pt_node = $xml->create_element("map");
				    $pt_node = $root->append_child($pt_node);
					$pt_node->set_attribute("pt", $_GET['pt']);
				}
				$pt_nodes = $root->get_elements_by_tagname("map");
				reset($pt_nodes);
				while (list($t, $node) = each($pt_nodes)) {
					$attr = $node->attributes();
					if ($_GET['pt'] == $attr[ 0 ]->value) {
						$pt_node = $node;
						break;
					}
				}
				$area = $xml->create_element("area");
				$area->set_attribute("shape", "rect");
				$area->set_attribute("coords", ($x -  5 ).",0,".($x +  15 ).",20");
				$area->set_attribute("href", "javascript: edit(4, '".date("d.m.Y", $i)."', ".$_GET['pt'].");");
				$pt_node->append_child($area);	
				$xml->dump_file($file, false, true);
            }
и кладется во временный файл на диске.
Так извлекается выглядит обработчик события onreadysatetchange изображения:
Код: plaintext
1.
2.
function update_maps() {
   if  ('complete' == event.srcElement.readyState) get_maps();
}
Так выглядит функция get_maps():
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
function get_maps() {
  var rq =  new  ActiveXObject("Microsoft.XMLHTTP");
  rq.onreadystatechange = function() {
     if  (rq.readyState ==  4 ) {
	  var nodes = rq.responseXml.selectNodes('/maps/map');
	   for  (var i =  0 ; i < nodes.length; i++) {
	    var node = nodes.nextNode;
		document.getElementById('m' + node.attributes[ 0 ].value).innerHTML = node.xml.replace(/<\/map>/g, '').substr( 15 ).replace(/--br--/g, '
');
	  }
    }
  }
  rq.open('POST', 'main.php?maps=1', true);
  rq.setRequestHeader("Content-Type", "text/xml");
  rq.send();
}
А так выглядит фрагмент php-кода, который формирует responseXml для функции get_maps() (в смысле, для функции обработчика события onreadystatechange ActiveX-объекта):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
if ($_GET['maps']) {
	    header("Content-type: text/xml");		
		if (file_exists("maps.tmp")) {
		    echo implode("", file("maps.tmp"));
		} else echo "<?xml version=\"1. 0 \" ?><maps />";
		unlink("maps.tmp");
		die();
	}
Собссно...
Надеюсь, хоть чем-нибудь я помог.
...
Рейтинг: 0 / 0
24.04.2006, 13:15
    #33686040
Yura Nickolaev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Критическая ошибка IE
И все-таки попробовали setTimeout()? Просто сталкивался с подобным поведением IE на других вещах (например какие-либо действия с XML DOM + XSLT) - setTimeout на критичную функцию помогает. А вылетало аналогично - непредсказуемо
...
Рейтинг: 0 / 0
24.04.2006, 13:17
    #33686046
Yura Nickolaev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Критическая ошибка IE
Yura NickolaevИ все-таки попробовали setTimeout()? Просто сталкивался с подобным поведением IE на других вещах (например какие-либо действия с XML DOM + XSLT) - setTimeout на критичную функцию помогает. А вылетало аналогично - непредсказуемо
Невнимательно прочитал последнее сообщение - картина еще сильнее похожа на то, что было у меня :)
...
Рейтинг: 0 / 0
24.04.2006, 13:39
    #33686104
dilomakin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Критическая ошибка IE
Сложность в том, что невозможно понять, какая функция критическая. Судя по отладке, все функции отрабатывают полностью. Браузер вылетает только после того, как отработает функция и пользователь предпримет какие-то действия (например, пошевелит мышкой). Попробую поставить setTimeout на обновление карты. Больше мыслей пока никаких.
...
Рейтинг: 0 / 0
24.04.2006, 13:45
    #33686125
dilomakin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Критическая ошибка IE
Yura Nickolaev Yura NickolaevИ все-таки попробовали setTimeout()? Просто сталкивался с подобным поведением IE на других вещах (например какие-либо действия с XML DOM + XSLT) - setTimeout на критичную функцию помогает. А вылетало аналогично - непредсказуемо
Невнимательно прочитал последнее сообщение - картина еще сильнее похожа на то, что было у меня :)
Господин Юра Николаев! Вы самый квалифицированный шаман из всех, с кем мне довелось встречаться. Где вы постигли такое изощренное искусство владения бубном? Научите?
А если серьезно, то я безмерно Вам благодарен.
Судя по первым пробам, все заработало при setTimeout('update_maps', 500).
Буду дальше тестировать.
Еще раз спасибо.
...
Рейтинг: 0 / 0
24.04.2006, 20:30
    #33687248
Yura Nickolaev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Критическая ошибка IE
dilomakinГосподин Юра Николаев! Вы самый квалифицированный шаман из всех, с кем мне довелось встречаться. Где вы постигли такое изощренное искусство владения бубном? Научите?
А если серьезно, то я безмерно Вам благодарен.
Судя по первым пробам, все заработало при setTimeout('update_maps', 500).
Буду дальше тестировать.
Еще раз спасибо.
Комплимент несколько сомнительный :) Но суть, как я понимаю, в том, что IE иногда банально не успевает выполнить какие-то действия (возможно, что ActiveX работают в отдельном треде и setTimeout() выполняет функцию такой кривоватой синхронизации)
...
Рейтинг: 0 / 0
24.04.2006, 20:33
    #33687250
Yura Nickolaev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Критическая ошибка IE
Да, и еще: при пошаговой отладке (например - alert'ами) все будет работать, т.к. показ диалоговых окошек, их закрытие и т.д. по сути дают тот же эффект, что и setTimeout()
...
Рейтинг: 0 / 0
25.04.2006, 09:16
    #33687690
dilomakin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Критическая ошибка IE
В отношении сомнительности комплимента.
ИМХО, слово "шаман" применительно к продуктам microsoft - самое точное определение человека, который в них разбирается.
Если Вы мое мнение не разделяете, то я возьму свои слова обратно.
...
Рейтинг: 0 / 0
25.04.2006, 09:19
    #33687697
dilomakin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Критическая ошибка IE
Yura NickolaevДа, и еще: при пошаговой отладке (например - alert'ами) все будет работать, т.к. показ диалоговых окошек, их закрытие и т.д. по сути дают тот же эффект, что и setTimeout()
Да я понял это после того, как заработало с setTimeout.
Еще раз спасибо за совет.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Критическая ошибка IE / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]