30 авг. 2011 г.

Валидное унифицированное подключение Java-апплета в XHTML

Когда встала реальная необходимость использования Java-апплета в проекте, освежил знания по этой тематике и перекопал интернеты. Результат совершенно не удовлетворил меня как веб-девелопера: невнятные советы, невалидная древняя разметка, куча логики, проверки на Netscape 6. Нужно было своё решение - современное, валидное, правильное.

29 авг. 2011 г.

javascripts.sourceforge.net

Обновил свои скрипты на SourceForge:
  1. демо
  2. страница проекта
  3. архив демо (1.2 Mb)
  4. архив проекта Aptana (6 Mb)
  5. просмотр в SVN
IDE Aptana (для которой архив проекта предназначен) - более-менее неплохая среда разработки JavaScript, основанная на Eclipse, имеет встроенный веб-контейнер Jetty, предпросмотр (Gecko), форматирование и валидацию HTML и JS (JSLint), заливку на SourceForge по SFTP.

26 авг. 2011 г.

Exception в setSelectionRange() в Firefox

Иногда при вызове element.setSelectionRange(begin, end); Firefox вываливает исключение:

uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMNSHTMLInputElement.setSelectionRange]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: http://127.0.0.1:8000/ui/lib/ui/maskedinput.js :: caret :: line 38" data: no]

Возможные причины:
  1. Элемент не подключен к документу (создан в JavaScript и не вставлен или только что вставлен в дерево DOM - возможны варианты в разных версиях Firefox).
  2. Элемент невидим (элемент или один из его родителей имеет стиль display:none).
  3. Элемент не имеет фокуса (проявилось в Firefox 3.6+).

25 авг. 2011 г.

Проверка слова на попадание в список зарезервированных идентификаторов

В ходе доработки ООП Prototype встала необходимость определения, является ли название поля/метода зарезервированным словом или нет. Придумал три возможных алгоритма решения (точнее придумал два, а один был подсмотрен в RightJS). На вполне закономерный вопрос, какой из трёх вариантов быстрее, ответ даёт онлайн-сервис тестирования производительности JavaScript  - весьма удобный инструмент для сравнения скорости выполнения разных вариантов скрипта в разных браузерах.

Нестандартные атрибуты тегов HTML

Тема нестандартных атрибутов (пользовательских, custom attributes) в тегах HTML уже давно бродит в кругах web-девелоперов. Некоторые, не долго думая, пишут всё что им вздумается, забивая на то, что получившийся HTML-код не пройдёт валидацию (раньше этим сильно грешил ZK framework). Некоторые с недавних пор уповают на будущий HTML5 и атрибуты, начинающиеся с префикса data-.

Практически никто не вспоминает (или вообще не знает) о решении, которое существует уже давно: XHTML. С самого начала XHTML позволял указывать свои пространства имён XML, в которых можно было творить почти всё, что душе угодно, не нарушая валидности XHTML кода.

23 авг. 2011 г.

Тонкости split() в IE

Чисто случайно (впрочем, как обычно это и происходит) при разборе на стороне клиента CSV-подобного ответа сервера обнаружил различие в результатах String#split(RegExp) и String#split(String) в Internet Explorer 6, 7 и 8 версий (в 9 и 10 не проверял):

"1||2".split(/\|/) // вернёт ["1", "2"]
"1||2".split("|")  // вернёт ["1", "", "2"]

То есть при вызове split с регулярным выражением осёл IE считает подряд идущие совпадения одним совпадением и пустых элементов в результате не возвращает, в отличие от вызова split с использованием строки. Во всех остальных браузерах split возвращает одинаковые результаты (с пустыми элементами).