Сегодня столкнулся с такой проблемой: нужно ввести пароль, содержащий русские символы. Но не тут-то было. Safari просто отказалась переключать язык! Простым решением было бы ввести пароль в TextEdit и скопипастить его в поле для ввода пароля, но организм требовал более элегантного решения проблемы. И вот, вспомнив приемы CSS-джитсу и Javascript-фу, превозмогая пятничное стремление пойти напиться или пройти наконец Braid, ваш покорный слуга ринулся в бой...

323.51
Рейтинг
JavaScript *
Прототипно-ориентированный язык программирования
Сначала показывать
Порог рейтинга
Уровень сложности
Электронное табло
1 мин
3.8KВ одном из моих проектов, которому возможно никогда не суждено родиться (из-за отсутствия времени), понадобилось электронное табло.
Но прилагательное «электронное» носит исключительно образный характер. Нужна была реализация электронного табло в Веб, такого, чтобы никого не убило током и визуально было похоже на своих настоящих электрородителей.
Но прилагательное «электронное» носит исключительно образный характер. Нужна была реализация электронного табло в Веб, такого, чтобы никого не убило током и визуально было похоже на своих настоящих электрородителей.
+49
Шпаргалка => Cross Domain AJAX. Dynamic script Tag Hack
2 мин
5.6KТак сложилось исторически (из-за соображений безопасности), что Javascript-обьект XMLHttpRequest, который лежит в основе AJAX, не может делать кросс-доменные вызовы. Это бесполезное ограничение: для злоумышленников не представляет особой проблемы, а для разработчиков создает некоторое неудобство. В следующих поколениях браузеров эту проблему обещали решить, но не раньше чем W3C хотя бы одобрит новые стандарты.
Есть море хаков чтобы обойти это ограничение, но самый популярный это Dynamic Script Tag Hack. Именно через этот хак организован доступ к многим API современных веб-приложений.
Есть море хаков чтобы обойти это ограничение, но самый популярный это Dynamic Script Tag Hack. Именно через этот хак организован доступ к многим API современных веб-приложений.
+26
Оптимизация с помощью замыканий
2 мин
1.7KДано — раз в секунду дергается AJAX'ом скрипт, в нем несколько вызовов одной функции (назовем ее updater) с разными аргументами. Функция в соответствии с аргументами апдейтит некоторый набор DOM-элементов (меняет контент, скрывает, показывает) на текущей странице. Используется jQuery, визэффекты и т.п. Т.е. на клиента приходит примерно такой код…
Проблема — после увеличения количества вызываемых функций (увеличилось количество типовых блоков) все жутко тормозит — много времени уходит на jQuery, на выбор DOM-элементов по селекторам.
Требуется по-возможности быстро и безболезненно, не меняя верстку и не отказываясь от jQuery оптимизировать процесс.
updater('id1', 10, 20);
updater('id33', 11, 22);
updater('id181', 102, 27);
* This source code was highlighted with Source Code Highlighter.
Проблема — после увеличения количества вызываемых функций (увеличилось количество типовых блоков) все жутко тормозит — много времени уходит на jQuery, на выбор DOM-элементов по селекторам.
Требуется по-возможности быстро и безболезненно, не меняя верстку и не отказываясь от jQuery оптимизировать процесс.
+3
InfoVis Toolkit
1 мин
2.3KПеревод

+36
Передача функций через JSON
3 мин
17KПеревод
Из этого топика вы узнаете как отправить JavaScript функции, через JSON используя PHP (сама концепция может быть применена и для других языков).
PHP, начиная с версии 5.2.0, включает функции json_encode() и json_decode(). Эти функции кодируют данные в формат JSON и декодиуют JSON в ассоциативные массивы. В json_encode() не может быть закодирована функция. В ряде случаев это чертовски неудобно.
PHP, начиная с версии 5.2.0, включает функции json_encode() и json_decode(). Эти функции кодируют данные в формат JSON и декодиуют JSON в ассоциативные массивы. В json_encode() не может быть закодирована функция. В ряде случаев это чертовски неудобно.
- Добавлен пример реализации в Zend Framework.
- Вопрос к кармавампирам — вы знаете вариант как передать handler для создания объекта иначе?
- Комментарий о том для чего и кому это нужно.
-4
prettyPrint
1 мин
9.2KПеревод

«prettyPrint» — браузерный дампер переменных для JavaScript аналогичный cfdump для ColdFusion. Он позволяет выводить на экран объекты любого типа в виде таблиц для просмотра во время отладки.
Посмотреть пример.
+32
Подводные камни оператора сравнения
1 мин
11KОператор сравнения (==) в JavaScript не является транзитивным. Переводя с математического, это означает, что из того, что a==b и a==c не следует, что b==c.
Простой пример:
В чём же дело? А дело в том, что переменные b и c — это объекты (причём разные), а a — примитивное значение (строковой литерал). Две переменных-объекта считаются неравными, если они ссылаются на разные объекты. При сравнении же примитивного значения и объекта используются другие правила — всё приводится к строкам и затем сравнивается.
Чем это чревато? Чревато очень трудноуловимыми ошибками. С точки зрения программиста примитивное значение типа string и объект, созданный из строки конструктором String(), практически неотличимы, и даже во многих книгах этот момент упоминается мимоходом, без конкретных примеров.
Аналогичная ситуация и с другими примитивными типами и соответствующими объектами, например, Number.
Так что будьте осторожны при сравнивании двух переменных!
Простой пример:
var a = "строка";
var b = new String(a);
var c = new String(a);
alert(a==b); // true
alert(a==c); // true
alert(b==c); // false
В чём же дело? А дело в том, что переменные b и c — это объекты (причём разные), а a — примитивное значение (строковой литерал). Две переменных-объекта считаются неравными, если они ссылаются на разные объекты. При сравнении же примитивного значения и объекта используются другие правила — всё приводится к строкам и затем сравнивается.
Чем это чревато? Чревато очень трудноуловимыми ошибками. С точки зрения программиста примитивное значение типа string и объект, созданный из строки конструктором String(), практически неотличимы, и даже во многих книгах этот момент упоминается мимоходом, без конкретных примеров.
Аналогичная ситуация и с другими примитивными типами и соответствующими объектами, например, Number.
Так что будьте осторожны при сравнивании двух переменных!
+52
Скорость работы у последних коммуникаторов
1 мин
599Был произведет тест по скорости работы JavaScript в браузерах на основе WebKit. Тесты производились на коммункаторах последних поколений. Естественно iPhone 3G S занимает первенство, как в рекламных целях, так и не стоит забывать о мощности его процессора. Для тестов использовался SunSpider Benchmark


+4
MooTools — AJAX + document.write
1 мин
1.8KНаконец кто-либо из «библиотек-гигантов» решил внедрить корректную обработку document.write при использовании AJAX. MooTools Core Dev Thomas Aylott демонстрирует алгоритм переопределения document.write.
Использование данного алгоритма позволит в AJAX осуществлять подгрузку HTML страниц со скриптами содержащими document.write. Такими могут быть страницы с Google AddSense, страницы содержащие JavaFX, другие.
Из анализа алгоритма вытекает
Использование данного алгоритма позволит в AJAX осуществлять подгрузку HTML страниц со скриптами содержащими document.write. Такими могут быть страницы с Google AddSense, страницы содержащие JavaFX, другие.
Из анализа алгоритма вытекает
+15
JsImageBox — легкий аналог LightBox
1 мин
8.2KjsImageBox — компактный, легкий в подключении скрипт, аналог lightbox. Позволяет показывать увеличенные изображения во всплывающем блоке.
Код скрипта занимает всего 9кб.
На страницу нужно подключить только один js файл. Скрипт написан без использования сторонних фреймворков и библиотек, поэтому не должен вызвать конфликтов при подключении на сайты, уже сделанные с использованием какого-либо фреймворка.
Бесплатен. (лицензия GPL)
Изначально разрабатывался для собственного использования.
Сайт проекта JSImageBox — JavaScript галерея
Код скрипта занимает всего 9кб.
На страницу нужно подключить только один js файл. Скрипт написан без использования сторонних фреймворков и библиотек, поэтому не должен вызвать конфликтов при подключении на сайты, уже сделанные с использованием какого-либо фреймворка.
Бесплатен. (лицензия GPL)
Изначально разрабатывался для собственного использования.
Сайт проекта JSImageBox — JavaScript галерея
+33
Безопасный JSONP? Интересная особенность Bing API
3 мин
1.9KПеревод
Я только что изучил API нового поисковика Bing от Microsoft (который фактически является ребрендингом Live Search, также с переключением на «просмотр с малой полосой пропускания», чтобы иметь возможность использовать документы более гибко), и нашёл интересный финт для защиты кода от выброса исключений.
+21
Справочник по javascript
1 мин
28KВсем привет!
Очень часто слышу вопрос «где в интернете взять справочник по javascript»?
Большинство справочников содержат устаревшую информацию и практики программирования.
До текущего момента самое современное, чем можно было пользоваться — MDC/MSDN. А там многое только на английском.
Хочу представить новый, лично мною переведенный/написанный справочник: http://javascript.ru/manual.
Пока что основной javascript, в дальнейшем постараюсь расширить и лучше
завязать с другими тематическими статьями сайта.
Буду рад, если пригодиться.
P.S. Пожалуйста, пишите комментарии, давайте на него ссылки и рекомендуйте. Будем улучшать и дальше.
P.P.S. Оффлайн-вариант справочника также есть, в формате CHM.
Очень часто слышу вопрос «где в интернете взять справочник по javascript»?
Большинство справочников содержат устаревшую информацию и практики программирования.
До текущего момента самое современное, чем можно было пользоваться — MDC/MSDN. А там многое только на английском.
Хочу представить новый, лично мною переведенный/написанный справочник: http://javascript.ru/manual.
Пока что основной javascript, в дальнейшем постараюсь расширить и лучше
завязать с другими тематическими статьями сайта.
Буду рад, если пригодиться.
P.S. Пожалуйста, пишите комментарии, давайте на него ссылки и рекомендуйте. Будем улучшать и дальше.
P.P.S. Оффлайн-вариант справочника также есть, в формате CHM.
+135
Ближайшие события
Микропаттерны оптимизации в Javascript: декораторы функций debouncing и throttling
2 мин
59KДекораторы функций позволяют добавить дополнительное поведение функции, не изменяя ее. Сигнатура оригинальной и декорированной функции полностью совпадают.
+70
+30
ECMAscript 5: Строгий режим, JSON, и так далее
9 мин
7KПеревод
Раньше я проанализировал функциональность обьектов и свойств ECMAScript 5. Это огромный новый аспект языка и он заслуживает особого рассмотрения.
Есть целый ряд других новых функций и API, которые также требуют внимания. Самыми значимыми из которых являются строгий режим и родная поддержка JSON.
Есть целый ряд других новых функций и API, которые также требуют внимания. Самыми значимыми из которых являются строгий режим и родная поддержка JSON.
+39
ECMAscript 5: Обьекты и Свойства
8 мин
13KПеревод
ECMAScript 5 идёт по своему пути. Воскреснув из пепла ECMAScript 4, который был ужат обратно к ECMAScript 3.1, который далее был вновь назван ECMAScript 5 (подробнее) — он приходит с новым слоем функциональности, построенным на базе нашего любимого ECMAScript 3.
Анонсировано несколько новых API, включённых в спецификацию, но самая интересная функциональность заключена в коде обьектов и свойств. Этот новый код дает возможность существенно влиять на то, как пользователи смогут взаимодействовать с объектами, позволяя обеспечить геттеры и сеттеры, предотвратить перечисление, манипуляции, или удаление, и даже предотвратить добавление новых свойств. Короче говоря: Вы будете иметь возможность повторить и расширить существующий набор API для JavaScript (например, DOM), с помощью JavaScript (не используя более ничего).
Анонсировано несколько новых API, включённых в спецификацию, но самая интересная функциональность заключена в коде обьектов и свойств. Этот новый код дает возможность существенно влиять на то, как пользователи смогут взаимодействовать с объектами, позволяя обеспечить геттеры и сеттеры, предотвратить перечисление, манипуляции, или удаление, и даже предотвратить добавление новых свойств. Короче говоря: Вы будете иметь возможность повторить и расширить существующий набор API для JavaScript (например, DOM), с помощью JavaScript (не используя более ничего).
+47
Слушаем вызовы функций в Javascript
12 мин
10KМногие знают о механизме Event-Dispatcher-Listener'ов, реализованному во многих языках программирования. Я же создам подобный механизм не для Event'ов, а для любого метода объекта JavaScript — Object.
Я не претендую на оригинальность, нет. Основная цель статьи — рассмотреть интересные механизмы прототипирования в JavaScript, создание декораторов и, собственно, постараться хоть немного раскрыть мощь и гибкость это чудесного языка, который так часто обижают и недооценивают.
UPD1: краткое содержание:
1. Создание декоратора на JavaScript
2. Создание механизма Function call listener с помощью декораторов
UPD2: от 09.06.2009
В конце статьи я добавил раздел Update: Decorator Mark II. В нём — исправления и улучшения (я не перекраивал всю статью из-за этого)
Итак, первый (и, надеюсь, не последний) рецепт в моей поваренной книге JavaScript.
Я не претендую на оригинальность, нет. Основная цель статьи — рассмотреть интересные механизмы прототипирования в JavaScript, создание декораторов и, собственно, постараться хоть немного раскрыть мощь и гибкость это чудесного языка, который так часто обижают и недооценивают.
UPD1: краткое содержание:
1. Создание декоратора на JavaScript
2. Создание механизма Function call listener с помощью декораторов
UPD2: от 09.06.2009
В конце статьи я добавил раздел Update: Decorator Mark II. В нём — исправления и улучшения (я не перекраивал всю статью из-за этого)
Итак, первый (и, надеюсь, не последний) рецепт в моей поваренной книге JavaScript.
+102
Улучшаем формы или Веб-Восемь-Ноль-Сто-Три
13 мин
1.4KИтак, мы выбрали браузер вместо отдельно стоящего толстого клиента. Пользователь очень хочет вводить данные. Однако, обычные формы плохие. Потому, что:
+19
Processing.js
2 мин
13KДанный язык уже был на хабре, однако пост был посвещен самому Processing, думаю многим будет интерессно почитать и про Processing.js.
Processing.js — это открытый язык программирования для визуализации в вебе который представляет собой портированный Processing на JavaScript. Processing.js использует Js для анимации и тег canvas для работы с изображением. Сразу же можно заметить некоторый минус данного подхода, он не особо дружен с IE, причем по заявлениям Microsoft поддерживать тег canvas они и в дальнейшем не собираются. Во всяком случае 8 работать отказался. Синтаксис реализации очень похож на синтаксис Java.
Processing.js — это открытый язык программирования для визуализации в вебе который представляет собой портированный Processing на JavaScript. Processing.js использует Js для анимации и тег canvas для работы с изображением. Сразу же можно заметить некоторый минус данного подхода, он не особо дружен с IE, причем по заявлениям Microsoft поддерживать тег canvas они и в дальнейшем не собираются. Во всяком случае 8 работать отказался. Синтаксис реализации очень похож на синтаксис Java.
+24
Вклад авторов
alexzfort 9303.0ru_vds 6346.8ilusha_sergeevich 2778.0azproduction 2516.8aio350 2394.9alizar 2063.6phillennium 1700.2TheShock 1133.0spmbt 944.6Sirion 766.0