Показать сообщение отдельно
  #22 (permalink)  
Старый 26.01.2014, 15:15
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от melky
что?
Я не о том. Понятно что вставленный парсером скрипт исполняется тут же, а парсер ждет. Я о том, что внешний скрипт, вставленный во время парсинга юзером (через appendChild) будет исполнен асинхронно. Если не ошибаюсь, все внешние скрипты (то есть имеющие [src]), вставленные через appendChild, помечаются как асинхронные.

Но я вновь ошибся. Если вставлять скрипт даже синхронно, через document.write, то конечно же он исполнится только когда текущий скрипт отработает. Я просто запутался. Есть еще вариант вставки через appendChild инлайн-скрипта. Так вот он отработает незамедлительно, прям в момент вставки.

Вставка через appendChild, не сработает, так как это внешний скрипт, вставленный юзером (отрабатывает всегда асинхронно).
<script>
	var script = document.createElement('script');
	script.src = 'data:application/javascript,function%09fn(){alert("ok")}';
	document.head.appendChild(script);
</script>
<script>
	fn();
</script>


Вставка через document.write, сработает, так как скрипт будет разобран парсером сразу же и отправлен на выполнение.
<script>
	var script = document.createElement('script');
	script.src = 'data:application/javascript,function%09fn(){alert("ok")}';
	document.write('<script src=\'data:application/javascript,function%09fn(){alert("ok")}\'><\/script>');
</script>
<script>
	fn();
</script>


Сработает, чем-то похоже на eval.
<script>
	var script = document.createElement('script');
	script.innerText = 'function fn() {alert("ok")}';
	document.head.appendChild(script);
	fn();
</script>
__________________
В личку только с интересными предложениями
Ответить с цитированием