Странное поведение переменной при подключении скрипта.
Привет.
Есть файл скрипта: test.js var cool = {id:5}; Теперь самое интересное! Подключаем этот файл из *.html методом раз: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title> New Document </title> <script type="text/javascript" src="test.js"></script> <script>alert(cool.id);</script> </head> <body> <button onClick="javascript:alert(cool.id);">Press here for get you id now!</button> </body> </html> Тут все понятно. Сначала alert'ом выводится число 5, а если нажимаем на кнопку "Press here for get you id now!", то число 5 выводится еще раз. Подключаем этот файл из *.html методом два: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title> New Document </title> </head> <body> <button onClick="javascript:alert(cool.id);">Press here for get you id now!</button> <script> (function() { var script = document.createElement('script'); script.type = 'text/javascript'; script.async = true; script.src = 'test.js'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(script); })(); </script> <script>alert(cool.id);</script> </body> </html> При попытке вывести число 5, простым alert'ом появляется ошибка: cool is not defined а если нажать на кнопку, то все в порядке и число 5 выводится! Почему так происходит? Хочу обратить внимание, что во втором варианте подключения, я даже строку <script>alert(cool.id);</script> опустил ниже динамического подключения самого скрипта. Чтобы на верняка! |
Ну а что ты хотел все так быстро, понятно дело что нужно время на то что бы скрипт загрузился, вот пока он грузится этот alert срабатывает быстрее чем загрузился скрипт
|
Цитата:
Спасибо! |
Ну и вопрос в тему...
А как при втором варианте проверить, что скрипт загрузился? Кроме извращений с callback и onreadystatechange? Выполнить его в setTimeout()? |
Цитата:
|
есть еще такой вариант http://javascript.ru/forum/events/20...tml#post119064
|
Цитата:
Спасибо! Но пока склоняюсь подключить скрипт в конец тега <BODY> ;) |
Часовой пояс GMT +3, время: 08:36. |