Показать сообщение отдельно
  #21 (permalink)  
Старый 26.01.2014, 14:47
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от danik.js Посмотреть сообщение
melky я не понимаю к чему ты клонишь.
Сообщение от Poznakomlus Посмотреть сообщение
какой смысл удаять тег если скрипт будет все равно в памяти?
вот это я имел в виду. Скрипт на момент "удаления" уже пропарсен движком JS с скомпилен в байт-код (неоптимизированный).


Сообщение от danik.js Посмотреть сообщение
Впрочем я оказался не прав: даже во время парсинга скрипт исполнится асинхронно:
<script>
    var script = document.createElement('script');
    script.src = 'data:application/javascript,function%09fn(){alert("ok")}';
    document.head.appendChild(script);
    fn();
</script>


<script>
document.addEventListener('DOMContentLoaded', function(){
    var script = document.createElement('script');
    script.src = 'data:application/javascript,function%09fn(){alert("ok")}';
    document.head.appendChild(script);
    fn();
});
</script>
что?

попробуй достать до <body> из <head>, если они исполняются асинхронно. Парсер HTML приостанавливается, когда встречает <script>. Продолжает работу, когда <script> пропарсен.

твой первый пример полностью подтверждает это

<html>
<head>
<script>
try {
    alert( 'document.getElementsByTagName("body").length: ' +  document.getElementsByTagName("body").length );
} catch (e) {
    alert( 'ошибка при доступе к document.getElementsByTagName("body").length \n\n\t' + e.message  );
}
</script>
</head>
<body>Должен быть алерт</body>
</html>


асинхронно (не задерживая парсер HTML) скрипты загружаются, если их пометить атрибутом async (в старых IE называется defer). Но это не даёт никаких гарантий, что этот асинхронный скрипт будет работать после парсинга дерева.

Cори за оффтоп.

Последний раз редактировалось melky, 26.01.2014 в 14:51.
Ответить с цитированием