powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Критическая ошибка IE
14 сообщений из 14, страница 1 из 1
Критическая ошибка IE
    #33680005
dilomakin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые люди!!!
Помогите, пжалста. Не могу разобраться уже довольно много времени. Проблема вот в чем.
На html-странице имеется рисунок.
К этому рисунку присобачена карта (map).
В один из моментов работы со страницей возникает необходимость обновить рисунок (то бишь средствами JavaScript изменить его src-атрибут).
У рисунка есть обработчик события onreadystatechange, который при значении readyState = 'complete' обновляет карту изображения (через innerHTML элемента map).
После того, как карта обновлена (код трассировал пошагово), происходит выход из функции. Как только работа функции завершается, происходит CRASH, т.е. IE беспардонно сообщает о критической ошибке и вылетает. Может, у кого есть соображения на этот счет? Буду рад любым свежи мыслям. Заранее спасибо.
...
Рейтинг: 0 / 0
Критическая ошибка IE
    #33682596
dilomakin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Эхх-хх.
Совсем ни одного ответа.
Неужели мой случай уникальный?
...
Рейтинг: 0 / 0
Критическая ошибка IE
    #33682870
Yura Nickolaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно попробовать setTimeout() для обновления карты
...
Рейтинг: 0 / 0
Критическая ошибка IE
    #33682995
dilomakin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Геморрой в том, что все вылетает после того, как карта обновлена, и не всегда, а лишь в избранных случаях. Т.е., карта имеет несколько активных точек, тычешь в одну, все отрабатывает как надо, тычешь в другую - та же история, а тычешь в пятую - БУМ, и упал IE. Я в непонятках вообще...
...
Рейтинг: 0 / 0
Критическая ошибка IE
    #33683189
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Давайте тестовый пример, который бы вылетал по ошибке, тогда будут соображения.
...
Рейтинг: 0 / 0
Критическая ошибка IE
    #33683235
dilomakin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да нереально это. Там база корпоративная на несколько Гб. Без нее никак все это хозяйство не заработает. Могу привести часть 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
Критическая ошибка IE
    #33686040
Yura Nickolaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И все-таки попробовали setTimeout()? Просто сталкивался с подобным поведением IE на других вещах (например какие-либо действия с XML DOM + XSLT) - setTimeout на критичную функцию помогает. А вылетало аналогично - непредсказуемо
...
Рейтинг: 0 / 0
Критическая ошибка IE
    #33686046
Yura Nickolaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yura NickolaevИ все-таки попробовали setTimeout()? Просто сталкивался с подобным поведением IE на других вещах (например какие-либо действия с XML DOM + XSLT) - setTimeout на критичную функцию помогает. А вылетало аналогично - непредсказуемо
Невнимательно прочитал последнее сообщение - картина еще сильнее похожа на то, что было у меня :)
...
Рейтинг: 0 / 0
Критическая ошибка IE
    #33686104
dilomakin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сложность в том, что невозможно понять, какая функция критическая. Судя по отладке, все функции отрабатывают полностью. Браузер вылетает только после того, как отработает функция и пользователь предпримет какие-то действия (например, пошевелит мышкой). Попробую поставить setTimeout на обновление карты. Больше мыслей пока никаких.
...
Рейтинг: 0 / 0
Критическая ошибка IE
    #33686125
dilomakin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yura Nickolaev Yura NickolaevИ все-таки попробовали setTimeout()? Просто сталкивался с подобным поведением IE на других вещах (например какие-либо действия с XML DOM + XSLT) - setTimeout на критичную функцию помогает. А вылетало аналогично - непредсказуемо
Невнимательно прочитал последнее сообщение - картина еще сильнее похожа на то, что было у меня :)
Господин Юра Николаев! Вы самый квалифицированный шаман из всех, с кем мне довелось встречаться. Где вы постигли такое изощренное искусство владения бубном? Научите?
А если серьезно, то я безмерно Вам благодарен.
Судя по первым пробам, все заработало при setTimeout('update_maps', 500).
Буду дальше тестировать.
Еще раз спасибо.
...
Рейтинг: 0 / 0
Критическая ошибка IE
    #33687248
Yura Nickolaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dilomakinГосподин Юра Николаев! Вы самый квалифицированный шаман из всех, с кем мне довелось встречаться. Где вы постигли такое изощренное искусство владения бубном? Научите?
А если серьезно, то я безмерно Вам благодарен.
Судя по первым пробам, все заработало при setTimeout('update_maps', 500).
Буду дальше тестировать.
Еще раз спасибо.
Комплимент несколько сомнительный :) Но суть, как я понимаю, в том, что IE иногда банально не успевает выполнить какие-то действия (возможно, что ActiveX работают в отдельном треде и setTimeout() выполняет функцию такой кривоватой синхронизации)
...
Рейтинг: 0 / 0
Критическая ошибка IE
    #33687250
Yura Nickolaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, и еще: при пошаговой отладке (например - alert'ами) все будет работать, т.к. показ диалоговых окошек, их закрытие и т.д. по сути дают тот же эффект, что и setTimeout()
...
Рейтинг: 0 / 0
Критическая ошибка IE
    #33687690
dilomakin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В отношении сомнительности комплимента.
ИМХО, слово "шаман" применительно к продуктам microsoft - самое точное определение человека, который в них разбирается.
Если Вы мое мнение не разделяете, то я возьму свои слова обратно.
...
Рейтинг: 0 / 0
Критическая ошибка IE
    #33687697
dilomakin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yura NickolaevДа, и еще: при пошаговой отладке (например - alert'ами) все будет работать, т.к. показ диалоговых окошек, их закрытие и т.д. по сути дают тот же эффект, что и setTimeout()
Да я понял это после того, как заработало с setTimeout.
Еще раз спасибо за совет.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Критическая ошибка IE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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