Является ли элемент всегда доступным в DOM, даже если отсутствует в разметке HTML?

Каждый браузер, который я наблюдал, создает элемент , который доступен в DOM, даже если нет явного тегов в разметке документа.

Однако Google Analytics использует следующий код для динамической вставки скрипта:

(function() {
  var ga = document.createElement('script');
  ga.type = 'text/javascript';
  ga.async = true;
  ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
  (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga);
})();

Следующая строка:

(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga);

, кажется, делает особую уступку для случаев, когда элемент отсутствует.

Это просто случай крайней обратной совместимости (например, для Netscape 4 и т. П.), или есть ли основания полагать, что современные браузеры (например, Internet Explorer 6 и более поздние версии) всегда будут иметь доступ к элементу в DOM?

14
задан Bungle 29 August 2010 в 05:07
поделиться

1 ответ

Современные браузеры создают для вас элемент head, когда это необходимо.

Но предполагать, что клиент сделает это, неразумно, если вы хотите, чтобы ваш код был пуленепробиваемым. Так что гуглеры ведут себя консервативно и безопасно.

Дополнительный пункт в их заявлении является минимальным, но добавляет дополнительную надежность. Так что это хорошо.

ps Хорошая работа над вопросом и извлечением соответствующего кода.

Добавлено:

HTML-спецификация говорит, что тег заголовка является необязательным. Я не думаю, что создание браузерами головного «элемента» в доме требуется спецификацией. Google не хочет (и не должен) рассчитывать на его существование.

14
ответ дан 1 December 2019 в 13:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: