Какие браузеры поддерживают <script async = «async» />?


196

1 декабря 2009 года Google объявил о поддержке асинхронного отслеживания Google Analytics .

Асинхронное отслеживание достигается с помощью директивы async для <script>тега.

Какие браузеры поддерживают директиву async ( <script async="async" />) и с какой версии?


1
Прямо на той странице, на которую вы ссылаетесь: «Firefox 3.6 - первый браузер, официально предложивший поддержку этой новой функции». FWIW - это функция HTML5, которая быстро получает все больше и больше поддержки.
Crescent Fresh

51
Спецификация HTML5 говорит, что async = "true" недопустимо. В качестве логического атрибута HTML наличие атрибута указывает на «истину», а отсутствие атрибута равно «ложь». Если атрибут присутствует, единственными допустимыми значениями для атрибута являются «» и «асинхронный».
Джоэл Мюллер

Вот живой тест этого атрибута html5demo.braincracking.org/demo/async.php .

3
Это должна быть закладка для частой проверки для всех, кто интересуется этой проблемой: en.wikipedia.org/wiki/Comparison_of_layout_engines_%28HTML5%29
pumpkinthehead

Ответы:


162

Асинхронная поддержка, как указано в Google, состоит из двух частей:

  • используя скрипт на своей странице (скрипт поставляется Google), чтобы записать тег <script> в DOM.

  • этот скрипт имеет атрибут async = "true", чтобы сообщить совместимым браузерам, что он может продолжить рендеринг страницы.

Первая часть работает в браузерах без поддержки <script async..тегов, что позволяет им загружать асинхронные файлы с помощью «хака» (хотя и довольно надежного), а также позволяет отображать страницу, не дожидаясь получения ga.js.

Вторая часть касается только совместимых браузеров, которые понимают атрибут async html

  • FF 3.6+
  • FF для Android Все версии
  • IE 10+ (начиная с предварительного просмотра 2)
  • Chrome 8+
  • Chrome для Android Все версии
  • Safari 5.0+
  • iOS Safari 5.0+
  • Браузер Android 3.0+ (сотовый включен)
  • Опера 15.0+
  • Opera Mobile 16.0+
  • Opera Mini Нет (по состоянию на 8.0)

«Правильный html5» способ указать асинхронность - это <script async src="..."не <script async="true". Однако изначально браузеры не поддерживали этот синтаксис и не поддерживали установку свойства script для ссылочных элементов. Если вы хотите это, список изменится:

  • FF 4+
  • IE 10+ (превью 2 и выше)
  • Chrome 12+
  • Chrome для Android 32+
  • Safari 5.1+
  • Нет версий для Android

34
Я не уверен, что вам даже нужно async = "true", вы можете просто написать "async"
vsync

4
поэтому, если я сгенерирую тег script, как это делает Google - что будет правильно: var s = document.createElement ('script'); s.async = 'истина'; s.async = истина; (Google делает это таким образом) или s.async = 'async'; ?
Тоби

8
@Tobias: вы смешиваете булевы атрибуты HTML и соответствующие свойства элемента DOM: атрибут HTML (присутствует в разметке и при явной установке атрибутов с использованием setAttribute, что не рекомендуется) должен просто присутствовать или быть установлен либо на пустую строку, либо на себя ( defer="defer"особенно важно при написании XHTML-совместимых документов); при установке свойства элемента на лету с использованием JavaScript, следует использовать s.async = true.
Марсель Корпель

39
@vsync: даже не должно быть true; или async, async=""или async="async".
Марсель Корпель

4
Обратите внимание, что сообщение, связанное в вопросе, задается async="true". Это не правильный способ сделать это сейчас , но это был единственный широко поддерживаемый способ сделать это тогда . Например, IE10p2 поддерживал, async="true"но не поддерживалasync="async"
Philip Rieck

60

На самом деле есть две части этого вопроса.

  1. Вопрос: Какие браузеры поддерживают атрибут «async» для тега сценария в разметке?

    A: IE10p2 +, Chrome 11+, Safari 5+, Firefox 3.6+

  2. Q: Какие браузеры поддерживают новую спецификацию , которая определяет поведение для «асинхронной» собственности в JavaScript, на динамически созданный элемент сценария?

    A: IE10p2 +, Chrome 12+, Safari 5.1+, Firefox 4+

Что касается Opera, они очень близки к выпуску версии, которая будет поддерживать оба типа асинхронности. Я тесно работал с ними над этим, и это должно скоро выйти (я надеюсь!).

Дополнительную информацию об упорядоченной асинхронности (иначе, async = false) можно найти здесь: http://wiki.whatwg.org/wiki/Dynamic_Script_Execution_Order

Кроме того, чтобы проверить, поддерживает ли браузер новое динамическое поведение асинхронных свойств: http://test.getify.com/test-async/



10

С вашей ссылочной страницы:

http://googlecode.blogspot.com/2009/12/google-analytics-launches-asynchronous.html

Firefox 3.6 - первый браузер, официально предложивший поддержку этой новой функции. Если вам интересно, вот более подробная информация об официальной спецификации асинхронного HTML5 .


«Эта новая функция» относится к асинхронному атрибуту HTML5. Асинхронный фрагмент Google Analytics поддерживается всеми браузерами.
Брайан

1

В asyncнастоящее время поддерживается всеми последними версиями основных браузеров. Это поддерживается в течение нескольких лет в большинстве браузеров.

Вы можете отслеживать, какие браузеры поддерживают асинхронность (и откладывать) на веб-сайте MDN здесь:
https://developer.mozilla.org/en-US/docs/HTML/Element/script


Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится. - Из обзора
Майкл Гаскилл

@MichaelGaskill Этого достаточно? Вы хотите, чтобы я дал ссылку на ответ Филиппа?
Brunoais

0

Только что взглянул на DOM (document.scripts [1] .attributes) этой страницы, которая использует Google Analytics. Я могу сказать вам, что Google использует async = "".

[type="text/javascript", async="", src="http://www.google-analytics.com/ga.js"]
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.