Нам нужно гарантировать загрузку внешнего JavaScript-файла «ненавязчивым» образом, при этом обеспечить запрос на сервер статистики (создание картинки со специальными параметрами). В случае Google Analytics все будет очень тривиально, ибо картинка уже создается через new Image(1,1)
. Однако большинство счетчиков (Рунета и не только) оперируют document.write
, и если такая конструкция отработает после создания основного документа, то браузер просто создаст новый, в который запишет требуемый результат. Для пользователя это выльется в совершенно пустую страницу в браузере.
Основная сложность в переносе скриптов статистики в стадию пост-загрузки (по комбинированному событию window.onload
, которое описано в начале главы) заключается как раз в изменении вызова картинки, обеспечивающей сбор статистики, на DOM-методы (это может быть не только new Image
, но и appendChild
). В качестве примера рассмотрим преобразование скрипта статистики для LiveInternet:
document.write("<img src='http://counter.yadro.ru/hit;tutu_elec?r" +escape(document.referrer) +((typeof(screen)=="undefined")?"":";s"+screen.width+"*" +screen.height+"*" +(screen.colorDepth?screen.colorDepth:screen.pixelDepth)) +";u"+escape(document.URL)+";"+Math.random()+"' width=1 height=1 alt=''>")Как мы видим, его нельзя просто так перенести в область динамической загрузки. Для этого данный код нужно преобразовать примерно следующим образом:
new Image(1,1).src='http://counter.yadro.ru/hit;tutu_elec?r" +escape(document.referrer)+((typeof(screen)=="undefined")?"":";s" +screen.width+"*"+screen.height+"*" +(screen.colorDepth?screen.colorDepth:screen.pixelDepth)) +";u"+escape(document.URL)+";"+Math.random()Таким образом (все приведенные участки кода — это одна строка, разбитая для удобства чтения), мы просто заменили вызов
document.write
наnew Image()
. Это поможет в большинстве случаев. Если у вас ситуация не сложнее уже описанной, то следующие абзацы можно смело пропустить.