Tag: JavaScript

For in в JavaScript

Встраивая jQuery-дерево (dynatree) на сайт, я столкнулся с 1 нюансом javascript-а, который, возможно, вам ещё не попадался. Оказывается конструкция for [key] in [object] в разных браузерах работает по разному:

a = { 5:5, 3:3, 8:8, 12:12 };
for( var name in a )
{
    console.log( name );
}

Результат выполнения:

  • Opera 12, Google Chrome: 3 5 8 12 // сортировка по алфавиту
  • Firefox: 5 3 8 12 // полное соответствие

Пришлось переписать часть кода :)

Объединение javascript файлов

Эпоха тёплого лампового WEB 1.0 давно прошла, и в последнее время мы имеем дело со страницами, которые кишат так называемой динамичностью. Динамичность может быть обеспечена при помощи JavaScript, VbScript и плагинами вроде Java, Flash, Silverlight. В этой статье я хочу затронуть одну из возможных оптимизаций web-сайта — объединение всех javascript файлов в один.

Read more

Opera и загрузка файлов в CKeditor 3

Столкнулся с проблемой в Opera - после загрузки файла в диалоговом окне редактора CKEditor, если повторно загрузить файл, запрос для загрузки файла на сервер идёт не на заданный вами в настройках URL, а на два таких адреса. Как оказалось, виной тому использование события для тега bodyonbeforeunload, которое срабатывает всякий раз, когда document закрывается или перегружает страницу. Сие событие не функционирует в Opera, а так как форма для загрузки файлов не меняется до тех пор, пока диалоговое окно не будет закрыто, URL в нём “складывается”.

Решение проблемы - использовать тег <base>, при формировани ответа на серверной стороне. В нём можно указать такой относительный URL, который заставит все относительные ссылки на странице складывать не с реальным Location документа, а с его Base модификацией. Но! не стоит забывать о том, что мир не стоит на месте, и когда-нибудь onbeforeunload появится и в опере… а посему костыль, решающий эту проблему сейчас может насолить в будущем :)

Javascript: Double → Int32

В Javascript для чисел используется тип double (8 байт, числа с плавающей запятой). Мне понадобилось создать имитацию одного Delphi приложения при помощи JavaScript. В ходе сего процесса я наткнулся на проблему переполнения 2147483647 + 10

  • JS (Double): 2147483657
  • Delphi (Integer): -2147483639

Создать переменную типа Int в JS нельзя. Но как оказалось привести 2147483657 к - 2147483639 можно без бубнов и плясок добавив побитовое или:

  • JS: 2147483647 + 10 | 0 == -2147483639

Спасибо stackoverflow :) Более подробно про логические операторы можно прочесть здесь.

Заметки про MediaWiki #1

Плагины

Плагины (Extentions) - позволяют добавить движку какой-либо дополнительный функционал. Например возможность встраивания в статьи видео с youtube-а. Для установки этого плагина необходимо:

  • Закинуть файл (или папку с файлами, что реже) в директорию /extensions
  • Открыть файл LocalSettings.php и добавить в конец require_once(“$IP/extensions/YouTube.php”); где в скобках указывается главный файл плагина

В случае youtube плагина, видео можно встроить в статью просто применив конструкцию <youtube/>ссылка на ролик</youtube> в своей статье. Есть и более функциональные плагины для этой цели, которые поддерживают сразу несколько видео-хостингов, да и к тому же позволяют менять размер встраиваемого объекта, но в моём случае они почему то взбунтовались… В прочем это отдельная история. Рекомендую также установить плагин ParserFunctions, он понадобиться вам для написания шаблонов (мини-программирование), и Cite, который позволит легко и красиво организовать список сносок, разбрасывая их посреди статьи.

Read more