Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

асинхронные события в FF & Opera (dimagolov)
Author Message
dimagolov
Участник форума



Joined: 04 Feb 2007
Posts: 1664
Карма: 96
   поощрить/наказать

Location: Christ Church, Barbados

PostPosted: Wed Mar 04, 2009 12:52 am (написано за 6 минут 35 секунд)
   Post subject: асинхронные события в FF & Opera
Reply with quote

оказалось, что в FF & Opera не выполняется правило однопоточности. многопоточность можно создать так:
есть код, которые делает запрос к серверу (у меня через iframe), после чего выдает alert. по логике вещей (и IE) это значит, что исполнение текущего блока JS приостановлено и продолжится после нажатие OK в окошке. Любой иной код, вызываемый асинхронными событиями, должен отработать только после того, как текущий блок закончится, то есть после alert. HO, код вызываемый по onload запрошенного iframe умудряется выполняться пока висит первый alert и даже выкидывать свой alert поверх первого. нажать можно любой и продолжит исполняться естественно тот код, чей alert был нажат.

это в порядке вещей или нет? трудно оценить, действительно происходит многопоточное исполнение или нет, хотя тест можно написать (с циклом и засечками времени), пока руки не дошли.

Last edited by dimagolov on Wed Mar 04, 2009 6:03 pm; edited 1 time in total
Back to top
View user's profile Send private message
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 83
   поощрить/наказать


PostPosted: Wed Mar 04, 2009 11:40 am (спустя 10 часов 47 минут; написано за 1 минуту 48 секунд)
   Post subject:
Reply with quote

dimagolov,
пожалуй уточню.
Вы хотите сказать что есть код типа:
Code (JavaScript): скопировать код в буфер обмена
//some_code...
obj.onload = function() {
   alert("  !");
}
alert("  !");
Вылетает первый алерт, потом происходит событие онлоад и вылетает второй?
Back to top
View user's profile Send private message Send e-mail
dimagolov
Участник форума



Joined: 04 Feb 2007
Posts: 1664
Карма: 96
   поощрить/наказать

Location: Christ Church, Barbados

PostPosted: Wed Mar 04, 2009 3:40 pm (спустя 4 часа 44 секунды; написано за 5 минут 45 секунд)
   Post subject:
Reply with quote

Ну типа того, но так не получается. Возможно прикол во фреймах. И просто если менять src у фрейма повторить эфект не получалось (хотя и могу и ошибаться). А вот через форму получается, вот пример: после первого alert происходит запрос (фрейм красится в желтый), появляется alert "Query sent", а потом в FF 3 и Opera выплевывают после задержки "Frame Ready", Safari похоже и запрос отправляет только после нажатия OK на "Query sent", а GoogleChrome как и IE запрос отправляют сразу, но "Frame Ready" дают только после нажатия OK на "Query sent". Код ниже
assinc.html:
Code (html): скопировать код в буфер обмена
<html> (december.com/html/4/element/html.html)
<head> (december.com/html/4/element/head.html)
<title> (december.com/html/4/element/title.html)test</title>
<script> (december.com/html/4/element/script.html)

function LoadAlert() {
        alert("Top loaded ");
        frames["testIF"].DoQuery();
        alert("Query sent");
};
</script>
</head>
<body (december.com/html/4/element/body.html) onload= "LoadAlert()"> (december.com/html/4/element/.html)
Text of document
<iframe (december.com/html/4/element/iframe.html) id="testIF" name="testIF" src="assinc1.php"> (december.com/html/4/element/.html)</iframe>
after iframe
</body>
</html>
assinc1.php:
Code (php): скопировать код в буфер обмена
<html>
<head>
<title>test</title>
<script>
function LoadAlert() {
        document.body.style.backgroundColor= "green";
<?php if (isset (www.php.net/isset)($_POST['abc'])): ?>
        alert('Frame Ready');
<?php endif; ?>
}

function DoQuery () {
        document.body.style.backgroundColor= "yellow";
        document.f1.submit();
}
</script>
</head>
<?php if (isset (www.php.net/isset)($_POST['abc'])) sleep (www.php.net/sleep)(2); ?>
<body onload= "LoadAlert()" style="background-color: red">
Text of document
<form id="f1" name= "f1" method= "POST" action="<?php echo $_SERVER['PHP_SELF'];?>">
<input name="abc" type="text" value="param" />
</form>
</body>
</html>
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML