Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.02.2013, 09:21
Кандидат Javascript-наук
Отправить личное сообщение для hrundel Посмотреть профиль Найти все сообщения от hrundel
 
Регистрация: 01.08.2009
Сообщений: 102

Зачем в теге <script> создавать другой тег <script>?
Зачем в HTML-кодах, вставляемых с других сайтов (например, счётчиках посетителей), используется html-тег <script>...</script>, внутри которого на js создаётся ещё один тег <script>, и только в нём происходит подключение нужного js-файла?

Как например это делается в случае с подключением плагинов фесбука:
<script>(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/ru_RU/all.js#xfbml=1";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>


Такое же можно увидеть, например, и в Яндекс метрике, и в Google Analytics.
Не проще ли просто подключать js-файл из самого первого тега <script>?
Ответить с цитированием
  #2 (permalink)  
Старый 24.02.2013, 13:03
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Я думаю это делается для асинхронной загрузки скрипта. Если забить на старые браузеры, то можно просто писать
<script src="//connect.facebook.net/ru_RU/all.js#xfbml=1" id="facebook-jssdk" async=""></script>
Ответить с цитированием
  #3 (permalink)  
Старый 24.02.2013, 19:46
Кандидат Javascript-наук
Отправить личное сообщение для hrundel Посмотреть профиль Найти все сообщения от hrundel
 
Регистрация: 01.08.2009
Сообщений: 102

Так, наверное, правильнее.
<script src="//connect.facebook.net/ru_RU/all.js#xfbml=1" id="facebook-jssdk" async="async"></script>
Ответить с цитированием
  #4 (permalink)  
Старый 24.02.2013, 20:00
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от hrundel
Так, наверное, правильнее.
Не более правильно чем мой вариант. Это булев атрибут.
Есть и третий способ его указать (но он не совместим с xhtml синтаксисом):
<script async></script>
Ответить с цитированием
  #5 (permalink)  
Старый 25.02.2013, 13:52
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

Может, чтобы бороться с хитрецами, которые для накрутки посещаемости устанавливают один и тот же счетчик по несколько раз на страницу?
if (d.getElementById(id)) return;
Ответить с цитированием
  #6 (permalink)  
Старый 25.02.2013, 18:13
Кандидат Javascript-наук
Отправить личное сообщение для hrundel Посмотреть профиль Найти все сообщения от hrundel
 
Регистрация: 01.08.2009
Сообщений: 102

А тогда ещё вопрос появился. В DOM-дереве подключаемый таким образом тег <script>...</script> присутствует, хотя в html-коде страницы его нет. В какой момент js-файл будет загружен в браузер? Ведь браузер сначала загружает все скрипты, находящиеся в теге <head>...</head>, а потом продолжает загрузку страницы. Если это так, то подключаемый от фейсбука js-файл будет пропущен (если код вставляется в конец страницы)? Или я что-то не так понимаю?
Ответить с цитированием
  #7 (permalink)  
Старый 25.02.2013, 18:24
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Все скрипты выполняются последовательно (и в head, и в body - разницы нет). При выполнении (и загрузке) разбор документа приостанавливается. Однако скрипт, добавленный в DOM динамически - работает асинхронно. Как я сказал - я думаю ради этого всякие фэйсбуки так и делают.

Сообщение от hrundel
Или я что-то не так понимаю?
Не понимаешь. Скрипт просто диманически создатся, загрузится и по загрузке исполнится. Так что все будет работать.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему не работает тег <script> внутри тега <div>? serviom Общие вопросы Javascript 10 26.11.2011 01:24
Наведение на тег, подчеркивание текста в другом теге extonec Events/DOM/Window 7 19.08.2011 19:22