Ars Longa, Vita Brevis

Исправляем ошибки JavaScript в Clicky 0.3b для WordPress

В Австралии и США большой популярностью пользуется плагин Clicky — Web Analytics 2.0. Как следует из названия, Clicky является еще одним сервисом для анализа статистики веб-сайта. Судя по приведённой на сайте таблице, Clicky, образно говоря, "затыкает за пояс" даже такого конкурента, как Google Analytics.

Себе на сайты я ставить Clicky не пытался, но наблюдал его в действии в проекте, над которым работаю. Могу сказать, что сервис действительно мощный и удобный, а плагин Clicky для WordPress относится к разряду "сконфигурировал и забыл".

Всё хорошо, но по традиции есть одно "но": если на странице используется, например, Prototype, то плагин начинает кидаться ошибками JavaScript.

А ошибка там банальная: при поиске cookies автор использовал конструкцию for ... in и предполагал, что все перебираемые свойства окажутся строковыми. Для "голого" браузера это справедливо. Но как только какой-либо скрипт (например, Prototype) расширит прототип Array своими методами, начинаются ошибки. А всё дело в том, что при добавлении новых свойств или методов в прототип объекта у нас нет возможности пометить их как неперечисляемые (non-enumerable), то есть такими, чтобы for ... in их пропускал.

Решение простое: использовать обычный for вместо for ... in. Что, собственно говоря, нижеприведённый патч и делает. А также добавляет секцию <![CDATA[ ... ]]> внутрь скрипта, чтобы не было проблем с XHTML-контентом.

[-]
Download clicky.php.diff
diff -uwd -r clicky-original/clicky.php clicky/clicky.php
--- clicky-original/clicky.php  2007-06-14 12:33:40.000000000 +0300
+++ clicky/clicky.php   2008-06-25 17:40:07.000000000 +0300
@@ -27,15 +27,17 @@

   if( get_option('wpgc_visitornames')) {<br