А если сложнее?
Не все счетчики одинаково просты. Например, для сбора статистики с помощью того же Google Analytics нам нужно загрузить целую библиотеку — файл urchin.js или ga.js. На наше счастье, конкретно в этом скрипте данные уже собираются с помощью создания динамической картинки.
Поэтому все, что нам требуется в том случае, если во внешней библиотеке находится мешающий нам вызов document.write, — это заменить его соответствующим образом. Обычно для этого необходимо изменить сам JavaScript-файл. Не будем далеко ходить за материалом и рассмотрим преобразования на примере Omniture — довольно популярной на Западе библиотеки для сбора статистики.
Сначала нам нужно найти соответствующий участок кода внутри JavaScript-файла. В нашем случае это будет возвращаемая строка, которая затем вписывается в документ:
var s_code=s.t();if(s_code)document.write(s_code)
В коде Omniture достаточно найти соответствующий return:
return ' +"\"'+rs+'\" width=1 height=1 border=0 alt=\"\">' и заменить его на следующий код (заметим, что для src картинки берется переменная rs): return 'new Image(1,1).src=\"'+rs+'\"' Затем мы уже можем заменить вызов и в самом HTML-файле на var s_code=s.t();if(s_code)eval(s_code) Для того чтобы все окончательно заработало, необходимо заменить в файле s_code.js и остальные вызовы document.write (всего их там два). Выглядит это примерно так: var c=s.t();if(c)s.d.write(c); ... s.d.write(' +"'\" height=1 width=1 border=0 alt=\"\">'); меняем на var c=s.t();if(c)eval(c); ... new Image(1,1).name=imn; Внимательные читатели уже заметили, что альтернативой document.write в нашем случае стал eval, что по большому счету не очень хорошо. Однако здесь не ставится задачи перебирать конкретный скрипт «по косточкам», чтобы избавиться от такого костыля. В некоторых случаях стоит ограничиться просто уверенностью, что вся остальная логика останется нетронутой после вмешательств, ибо все изменения касались только отправки собираемых данных на сервер.