CB's blog

Архив рубрики 'JavaScript'

Динамическая загрузка JavaScript файлов

Четверг, Декабрь 4th, 2008

Не знаю, может это всем давно известно и тривиально, а может кому-то еще пригодится.

Собственно такая функция загружает JavaScript файл и после удачной загрузки вызывает функцию callback.

function addScript(src, callback) {
   var head = document.getElementsByTagName("head")[0];
   var script = document.createElement("script");

   script.type = "text/javascript";
   head.appendChild(script);
   script.src = src;

   // Normal browsers
   script.onload = callback;
   // IE
   script.onreadystatechange = function() {
      if(this.readyState == "loaded"  || this.readyState == "complete") {
         callback();
      }
   }
}

Пример использования:

addScript("http://job4it.net/informer/v0u0.5.0.js", ShowJob4ItData);

Литература:
Patrick Hunlock — Howto Dynamically Insert Javascript And CSS

P. S. Для меня самым сложным было сделать так чтобы работало в IE.

P. P. S. Описанный подход используется для “ленивой” загрузки баннеров на developers.org.ua

Кодирование UTF символов в JavaScript

Понедельник, Июнь 9th, 2008

JavaScript хоро? тем, что нормально работает с UTF, некоторые средства поддерживают юникод хуже. Эту функцию я написал чтобы работая с HTML кодировать потенциально проблемные символы (с кодом боль?е 127) в числовом формате вида: &#<десятичный код символа>;. (Для ?естнадцатеричного представления: &#x<16-ричный код символа>;).

Функция для десятичного случая (аргумент — строка):

function encodeUtf(s) {
   var buffer = [];
   for(var i=0, l = s.length; i <= l-1; i++) {
      var code = s.charCodeAt(i);
      if(code > 127) {
         buffer.push("&#" + code + ";");
      }
      else {
         buffer.push(s[i]);
      }
   }
   return buffer.join("");
}

Например, ‘ô’ закодируется как &#244;, а ‘R’ так и останется ‘R’.

Демо.

?збавляемся от о?ибки urchinTracker is not defined

Вторник, Август 7th, 2007

Часто при использовании Google Analytics появляется о?ибка JavaScript: urchinTracker is not defined (ее можно увидеть при установленном Firebug).

Для того, чтобы это безобразие исчезло, достаточно заменить в коде, который вставляется на страницу при использовании Google Analytics

urchinTracker();

на

if (typeof(urchinTracker) == 'function') urchinTracker();

?сточник.

CSS для Opera

Воскресенье, Июнь 24th, 2007

Один раз получилось так, что в во всех браузерах, кроме Opera 9, страница выглядела одинаково. Не самое удачное и красивое, но быстрое (по трудоемкости) и рабочее ре?ение я сделал с помощью куска JavaScript (предполагается, что глючит елемент с id elem-id, CSS-класс opera лечит глюки):

if(window.opera) {
   addLoadEvent(fixOpera);
}

function fixOpera() {
   var elem = document.getElementById("elem-id");

   if(elem) {
      elem.className += " opera";
   }
}

Ссылка по теме: quirksmode.org - Browser detect.

Рисование простых ломаных линий div’ами на JavaScript

Суббота, Май 19th, 2007

На этот раз я опи?у как при помощи div’ов и JavaScript можно рисовать несложные ломаные линии — только из горизонтальных и вертикальных сегментов. Для особо нетерпеливых читателей сразу ссылка на демку. Для тех, кто хочет рисовать дивами что-то сложное, ссылка на неплохую библиотеку от Walter Zorn wz_jsgraphics.js. А теперь по порядку.

(more…)