Обновить
137.2

JavaScript *

Прототипно-ориентированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Авторесайз IFRAME и безопасный способ передачи информации с одного домена на другой

Время на прочтение1 мин
Охват и читатели11K
Как известно, при работе с фреймами для обеспечения безопасности браузеры не позволяют JavaScript-коду обращаться со страницы одного домена на страницу другого домена. В этой краткой статье мы рассмотрим аспекты кросс-доменной работы в JavaScript, опишем один из «хороших» частных случаев, а в конце — я надеюсь в хабракомментах получить ответы на оставшиеся вопросы.

UPD1: те, кто здесь впервые, — обязательно читайте комментарии к этой статье, в них очень много интересного накидали (как я и надеялся). Спасибо!

UPD2: найдено решение задачи авторесайза для всего, кроме Opera < 10.

UPD3: полностью кроссбраузерное решение задачи с ресайзом приводится ниже. Его особенности: а) не портится history, б) работает даже в Опере 7 и IE6, в) для ускорения работы высота фрейма всегда делается кратной N=30 пикселям. Фактически, там 2 алгоритма — для IE (через location.hash) и для «не-IE» (через window.name и «простукивание» возможных высот в цикле). См. также комментарии к статье, там разъяснения, почему так, а не иначе.

UPD4: статья начала принимать черты монументальной, посему она переехала ко мне в Наблы на dkLab: dklab.ru/chicken/nablas/58.html — там же все примеры кода самой последней актуальности. Но, конечно, в случае изменений я буду их и тут тоже анонсировать, добавляя UPD5, UPD6 и т.д.

Асинхронная загрузка произвольного html

Время на прочтение5 мин
Охват и читатели9.1K
В связи с последними инициативами гугла учитывать время загрузки страницы становится всё более актуально асинхронно подгружать части веб-страниц уже после загрузки основного минимума. Реклама — один из претендентов на отложенную загрузку, но простой ajax тут не поможет, т.к. в общем случае в подгружаемом куске может встречаться, например, document.write, и если документ уже загружен и закрыт то данный метод открывает его заново, обнуляя при этом.

Гугл в этом плане не сильно помогает, т.к. основной описываемый метод — подмена document.write своим собственным методом, который тупо добавляет аргумент в конец документа, но если вызов идёт не в конце и писать надо куда-то в середину — возникает проблема. На хабре описывался фрейморк Fullajax, который вроде справляется с этим, но как именно — я пока не смотрел.

У меня возникла другая идея, возможно — велосипед, но желание попробовать было слишком сильным. А именно, подгружать отложенный код в скрытый iframe, а после загрузки переносить его содержимое туда, где оно должно быть. Более того, чтобы не делать лишних запросов к серверу, используется data URI. Такой подход работает в FF и Opera но не работает в IE и Chrome.
Читать дальше →

Виджет выбора OpenID провайдера на Prototype

Время на прочтение1 мин
Охват и читатели1.5K
Когда-то я уже писал, как интегрировать OpenID авторизацию в ваш сайт. Речь шла о серверной части.
Сейчас же я говорю о UI части — виджет для выбора провайдера.

В качестве клиентской библиотеки для своего проекта я выбрал prototype и первым делом я полез в гугл поискать готовое решение. Удалось найти такое, но только для JQuery — code.google.com/p/openid-selector

И так мне ничего не оставалось как написать OpenID selector самому. Вот что получилось

image
Читать дальше →

Интересная задачка

Время на прочтение1 мин
Охват и читатели4.5K
Вот такая простенькая задачка поставила меня в тупик:

var a=2
b=a++ + (--a * ++a)
//Чему равно b?


Исходя из приоритета операций скобки () имеют наивысший приоритет, значит сначала должно выполняться выражение в скобках, затем все остальное?

Напишите ваш вариант ответа, а потом запустите код в браузере (любом).

Мастер-классы по Javascript в Киеве, 26 декабря

Время на прочтение2 мин
Охват и читатели665
26 декабря, в Киеве, состоятся мастер-классы: «Профессиональноe javascript-программирование + COMET» и «Секреты клиентской оптимизации».

Мероприятия уникальные, проводятся в Киеве впервые.
Читать дальше →

Небольшой отладчик в Javascript

Время на прочтение3 мин
Охват и читатели645
Недавно столкнулся в исследованиях с проектом trimpath. Лично для себя ничего интересного не обнаружил, кроме интересного способа расстановки точек останова (я его немного видоизменил от оригинала — иначе длинные строки некорректно отображались в опере и ИА)

Читать дальше →

Простой способ сделать «дешёвый» Private в JS

Время на прочтение6 мин
Охват и читатели1.4K
В общем-то способ создавать члены класса, которые будут недоступны извне, в JavaScript существует и называется замыканием. Но при таком подходе есть один серьёзный минус — создаётся много экземпляров одной и той же функции, что не есть хорошо для ресурсов.

Читать дальше →

Тест на крепкого JS программера

Время на прочтение3 мин
Охват и читатели26K
Столкнулись тут мы с валом резюме на вакансию JS программера в нашу новую компанию. Понятно, что обработать огромное количество заявок силами двух человек весьма сложно. Разумным выходом является тест, по результатам которого некоторую часть кандидатов мы приглашаем на собеседование. Тест я написал на этих выходных, результат под катом.

Внимание, вопрос JS программерам, есть ли какие-то вещи, которые не нашли отражения в этом тесте?

Читать дальше →

Не кроссбраузерный event

Время на прочтение3 мин
Охват и читатели3.4K
Здравстуйте, уважаемое хабрасообщество. Реквестирую консультацию.
Позавчера, во время разработки jQuery.keyboard столкнулся с абсолютной браузерной несовместимостью, ужасно неприятной непоследовательностью и т.д. в возврашении значения event.keyCode в различных браузерах. На удивление, единственный, кто меня порадовал — IE 6 (ies4linux) и больше всех огорчила — опера 10. Хромиум и фокс же ж вернули приблизительно одинаковый результат.
Читать дальше →

Отладка Javascript

Время на прочтение5 мин
Охват и читатели146K
Debug Logo

Многие задают мне один и тот же вопрос:
«Как дебажить этот $%*!%$! JavaScript?».

Так вот, во-первых JavaScript — не $%*!%$! А как я его дебажу — сейчас расскажу.

(Примечание: наверное эта статья больше для новичков. Так что не судите строго)

Читать дальше →

Javascript — персональное безумие

Время на прочтение3 мин
Охват и читатели1.8K

Есть случайное такое хобби — программирование на JavaScript.

Недавно возник у меня глобальный вопрос:
Как часто JS программисты задумываются над [function statement]?



Читать дальше →

Сравнение скорости популярных JS библиотек

Время на прочтение1 мин
Охват и читатели1.7K
Встал задача, выбрать JS библиотеку для нового проекта. Я уже работал с Prototype и JQuery, в разных проектах и выбирал в основном из них. Обе библиотеки имеют свои слабые и сильные стороны. Холивар на данную тему можно развивать до бесконечности, но меня в первую очередь интересует скорость.

Благодаря приложению пользователя lusever, я провел тест производительности. В тесте так же участвовала не без известная библиотека Ext JS. Тестируется скорость выборки DOM элементов по селекторам, можно зайти на сайт и попробовать пройти тест самостоятельно, кстати, там есть очень интересные примеры селекторов, о которых я ранее не знал.
Читать дальше →

Ближайшие события

Browser persistence

Время на прочтение2 мин
Охват и читатели1.8K
Browser persistence — техника, позволяющая хранить в браузере довольно большие объемы данных, которые в отличие от cookie не отсылаются на сервер при каждом запросе.

Все уже написано до меня, но на хабре никаких более-менее подробных упоминаний не нашел, поэтому написал краткий обзор — как это работает и собрал ссылки для более подробного изучения.
Читать дальше →

Getters & Setters в IE5+

Время на прочтение2 мин
Охват и читатели2.5K
Вот этим навеяло habrahabr.ru/blogs/javascript/66242

Вопреки расхожему мнению ИЕ все таки умеет назначать аксессоры, правда только в VB, чего для некоторых задач вполне достаточно.

<script language="vbscript">
' Объявляем класс, экземпляр которого в последствии будем использовать из яваскрипта
Class Accessor
  Public Property Let hook(val)  ' объявляем сеттер для свойства hook класса Accessor
   MsgBox val
  End Property
End Class

Dim access ' объявление переменных в VB обязательно
Set access = New Accessor  ' создаем экземпляр класса Accessor
</script>

<script language="jscript">
// т.к. у VB и JS общее пространство имен, можно вполне использовать созданный ранее access
access.hook = 'ololo';
</script>


* This source code was highlighted with Source Code Highlighter.


Другими словами аксессоры есть в VB, VB есть во всех IE и пространство имен VB и JS общее, можно пользовать.
Кроссбраузерный пример

Попытка классификации и анализа существующих подходов к наследованию в Javascript

Время на прочтение9 мин
Охват и читатели3.1K

Некоторое время назад у меня дошли руки до темы, которая давно уже меня нервирует интересует. Эта тема — наследование в JavaScript.

В сети есть много статей по данному вопросу, но мне не удалось найти обобщающего анализа, который бы удовлетворил меня своей полнотой и логикой. Почему хотелось найти именно обобщающий анализ? Дело в том, что особая, я бы сказал, уникальная сложность объектно ориентированного программирования в JS состоит в шокирующем (во всяком случае, меня) разнообразии его возможных реализаций. После довольно продолжительных неудачных поисков я решил попробовать разобраться в этом вопросе самостоятельно.

Хочу сразу сказать, что я не претендую на глубокое понимание ООП в JavaScript, и даже не претендую на глубокое понимание ООП вообще. Я буду рад, если моя попытка анализа окажется кому-нибудь полезной, но основная цель публикации, в некотором смысле, противоположная — мне бы хотелось самому воспользоваться замечаниями людей, которые лучше меня ориентируются в теме, чтобы прояснить ее для себя.
Читать дальше →

Мастер-класс «Секреты клиентской оптимизации» — как это было

Время на прочтение1 мин
Охват и читатели589
Вчера сходил на мастер-класс Ильи Кантора (javascript.ru). Если кратко — мне понравилось. Под катом немного подробнее.
Читать дальше →

Повышение качества javascript кода. JSLint

Время на прочтение6 мин
Охват и читатели31K

Случилось так, что в последнее время мне пришлось читать и рефакторить очень много ужасного javascript-кода. Работа с таким кодом стоит очень многих нервов при сопровождении, да и писать/отлаживать такой код не приятно. Мысли о том, что заставляет людей писать плохой код и как с этим можно бороться заставили меня писать эту статью. Не претендую на сколь-нибудь полное раскрытие темы борьбы за качество кода, хочу рассмотреть лишь некоторые аспекты, доставляющие наибольшее количество проблем. В качестве основного инструмента оптимизации качества кода предлагаю использовать JSLint, который несмотря на все плюсы, не является панацеей и может служить лишь отправной точкой для дальнейшего улучшения кода.

Всех у кого хоть раз болела голова при написании/чтении javascript кода прошу под кат.
Читать дальше →

Отделяем мух от котлет

Время на прочтение1 мин
Охват и читатели751
Часто встает задача показывать разным посетителям вебсайта несколько отличающуюся информацию. Как минимум можно отделять пришедших на вебсайт в первых раз от постоянных посетителей. Скажем для Wordpress подобную задачу выполняет плагин «Что сделал бы Сет Годин», который показывает предложение подписаться на RSS в течение первых пяти посещений блога.

Как сделать что-то более универсальное, что можно быстро применить к любому вебсайту?

Читать дальше →

placeholder.js

Время на прочтение1 мин
Охват и читатели24K
В HTML5 есть замечательный атрибут placeholder.

<input placeholder="inbox@disney.com">

placeholder

Сейчас он работает только в webkit-браузерах (Safari, Google Chrome).

С помощью JS, не изобретая велосипедов, placeholder.js делает этот атрибут кроссбраузерным.

<input placeholder="inbox@disney.com" id="some_input">
<script type="text/javascript">
  inputPlaceholder( document.getElementById('some_input') )
</script>


placeholder.js (1.3 килобайта)

Вклад авторов