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

Время срабатывания подключаемого SCRIPT (Г.О.)
Author Message
Г.О.
Участник форума



Joined: 22 Feb 2006
Posts: 378
Карма: 13
   поощрить/наказать

Location: Ленинград

PostPosted: Sun May 13, 2007 5:38 pm (написано за 4 секунды)
   Post subject: Время срабатывания подключаемого SCRIPT
Reply with quote

Здравствуйте!
Пишу, код, примерно следующего содержания:
Code (JavaScript): скопировать код в буфер обмена
<html>
    <head>
        <script type="text/javascript">
            var x = 1;
            (function() {
                var script = document.createElement("script");
                script.setAttribute("type", "text/javascript");
                script.setAttribute("src", "./2.js");
                document.documentElement.firstChild.appendChild(script);
                x = 2;
                alert("index.html: " + x);
            })();
        </script>
    </head>
    <body>
        Preved
    </body>
</html>
Как видно, здесь вначале подгружается js-файл.
Сам файл 2.js:
Code (JavaScript): скопировать код в буфер обмена
alert("2.js " + x);
Некоторый опыт программирования на js позволяет мне надеятся на следующую последовательность событий:
1. Создание элемента SCRIPT всего лишь инициирует загрузку файла, который начинает грузиться параллельно.
2. Сама текущая функция спокойно дорабатывает до конца
3. После ее завершения продолжается разбор hmtl-потока и отрисовка документа
4. В какой-то момент 2.js подгржается и исполняется. Причем если в этот момент выполняется какой-то другой js-код, то 2.js почтительно постоит в сторонке вплоть до его завершения

И IE с FF оправдывают мои надежды.
А вот фееричная Opera9 выдает:
"2.js: 1"
"index.html: 2"
Причем если поменять 2.js на 2.php:
Code (php): скопировать код в буфер обмена
<?php
sleep (www.php.net/sleep)(10);
?>
alert("2.js " + x);
она так и будет 10 секунд показывать белый экран, после чего выдаст 2 алерта в вышеприведенной последовательности.

Т.е. наконец-то появился полноценный include() в JavaScript :)

Кто прав? Кто виноват? Куда копать?
Back to top
View user's profile Send private message
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 269
   поощрить/наказать

Location: Питер

PostPosted: Sun May 13, 2007 5:54 pm (спустя 16 минут; написано за 4 секунды)
   Post subject:
Reply with quote

debugger.ru/blog/script_v_opere
Back to top
View user's profile Send private message
Валенок
Участник форума



Joined: 06 Apr 2006
Posts: 520
Карма: -3
   поощрить/наказать


PostPosted: Sun May 13, 2007 6:23 pm (спустя 28 минут; написано за 47 секунд)
   Post subject:
Reply with quote

я бы попробовал

....innerHTML += "<script ...>"

если не прокатит, то тоже, но с маленьким setTimeout();
Back to top
View user's profile Send private message
Г.О.
Участник форума



Joined: 22 Feb 2006
Posts: 378
Карма: 13
   поощрить/наказать

Location: Ленинград

PostPosted: Sun May 13, 2007 6:30 pm (спустя 7 минут; написано за 4 минуты 6 секунд)
   Post subject:
Reply with quote

WingedFox, спасибо за ссылку.
Не я сглючил, уже приятно :)
Т.е. как побороть не известно? У меня то проблема не в том, что функцию прерывает, а в том, что я хочу подгружать уже после загрузки страницы по какому-то событию. А в этот момент подвешивать браузер очень не хочется. Придется ajax привлекать.
Кстати, как я понял из ссылки такое поведение обнаружилось после версии 9.0.1? А у меня 9.0.0, странно...

[оффтоп]
Чисто теоретически, мне казалось, document.write() то как раз и должен работать в синхронном режиме, т.к. в поток вывода пишет.
Ох, и темное это дело, языки в 3-х реализациях...
Back to top
View user's profile Send private message
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 269
   поощрить/наказать

Location: Питер

PostPosted: Sun May 13, 2007 7:06 pm (спустя 35 минут; написано за 1 минуту 38 секунд)
   Post subject:
Reply with quote

Г.О.
Леший эту оперу знает. Факт есть, но возможно что именно в 9.0.1 синхронность была отключена =)
Могу предложить единственный вариант - подключать доп. скрипты по domload/load событиям.
Back to top
View user's profile Send private message
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Sun May 13, 2007 8:21 pm (спустя 1 час 15 минут; написано за 1 минуту 59 секунд)
   Post subject:
Reply with quote

Г.О.
Может вот эта "писанина" (Zeroglif "посылал" читать ;) ) поможет "пролить свет на это темное дело" - Timing and Synchronization in JavaScript (dev.opera.com/articles/view/timing-and-synchronization-in-javascript/)...
Back to top
View user's profile Send private message Send e-mail
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