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')) {
     echo "
-    <script type='text/javascript'>
+    <script type='text/javascript'>/*<![CDATA[*/
     function clicky_get_cookie( name ) {
       var ca = document.cookie.split(';');
-      for( var i in ca ) {
+     var len = ca.length;
+      for( var i=0; i<len; ++i ) {
         if( ca[i].indexOf( name+'=' ) > -1 ) return decodeURIComponent( ca[i].split('=')[1] );
       }
       return '';
     }
     var clicky_custom_session = { username: clicky_get_cookie( 'comment_author_".md5( get_option( "siteurl" ))."' ) };
+   /*]]>*/
     </script>\n";
   }
Добавить в закладки
  • del.ici.ous
  • Digg
  • Furl
  • Google
  • Simpy
  • Spurl
  • Y! MyWeb
  • БобрДобр
  • Мистер Вонг
  • Яндекс.Закладки
  • Текст 2.0
  • News2
  • AddScoop
  • RuSpace
  • RUmarkz
  • Memori
  • Закладки Google
  • Писали
  • СМИ 2
  • Моё Место
  • Сто Закладок
  • Ваау!
  • Technorati
  • RuCity
  • LinkStore
  • NewsLand
  • Lopas
  • Закладки - I.UA
  • Connotea
  • Bibsonomy
  • Trucking Bookmarks
  • Communizm
  • UCA

Комментарии к статье "Clicky 0.3b для WordPress и проблемы с JavaScript" (1) »

  1. [Июль 1, 2008 10:55 пп] Ошибки JavaScript в Clicky 0.3b для WordPress | WP лента:

    [...] Источник [...]

    #1

RSS лента комментариев к этой записи. TrackBack URL

Оставить комментарий к записи "Clicky 0.3b для WordPress и проблемы с JavaScript"

XHTML: Вы можете использовать эти теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, Вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя