Javascript → Асинхронный вариант гугло кнопки +1

27.11.2011

В русской версии мастера генерации кнопки +1, почему то нет опции "asynchronous code", о которой так радостно трубил гугл (пруф). Поэтому правим ручками:

вместо

<script src="https://apis.google.com/js/plusone.js"></script>
<g:plusone></g:plusone>

пишем

<script>
(function() {
  var po = document.createElement('script');
  po.type = 'text/javascript';
  po.async = true;
  po.src = 'https://apis.google.com/js/plusone.js';
  var s = document.getElementsByTagName('script')[0];
  s.parentNode.insertBefore(po, s);
})();
</script>
<g:plusone></g:plusone>
Похожие записи

Комментарии

А почему не воспользовался setTimeout ?

Ну вот например асинхронная загрузка скрипта openAPI

setTimeout(function() {
  var el = document.createElement("script");
  el.type = "text/javascript";
  el.src = "http://vkontakte.ru/js/api/openapi.js";
  el.async = true;
  document.getElementById("vk_api_transport").appendChild(el);
}, 0);

В асинхронности, собсна) Замечая вызов setTimeout интерпретатор закидывает его в стек вызова и читает скрипты дальше, т.е. время на создание скрипта не тратится.

асинхронность тут в document.createElement, а не setTimeout

Ну так создание же выполняется с setTimeout асинхронно

Ты забываешь про корректность работы во всех браузерах. Твой скрипт не будет асинхронно работать в IE 7 например.

Нотариально заверенный скриншот из ie7

ну как и следовало ожидать, скрипт plusone.js загружается параллельно с картинками (читай асинхронно)

Что-то я запутался в результатах теста. Даже когда убираешь el.async = true; он всё равно грузится с картинками асинхронно. Потестируй в IE7 код, очень интересные результаты получаются.

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

Добавить комментарий