Ода Ослиному Упорству.
Обожаю майкрософт!
Довелось мне тут по работе столкнуться с одной задачкой. Мой заказчик решил на своем сайте сделать окно приветствия — когда пользователь заходит на страницу регистрации, должно появиться всплывающее окно, в котором владелец сайта приветствует новоприбывшего будущего пользователя его ресурса.
И для этой незамысловатой цели он выбрал достаточно простую и удобную библиотеку iBox (http://www.ibegin.com/labs/ibox/. Она представляет собой кусок кода на JavaScript, который только то и делает, что генерит разнообразные всплывающие окошки. Кстати, довольно красивые и функциональные. Размер библиотеки — чуть больше 20 килобайт. В использовании простая как две копейки.
Ну так вот, соорудил он, значит, HTML-файл с приветствием, и вставил в код страницы регистрации такой вызов:
<body onLoad="iBox.showURL('welcome.html','block','block')">
Суть проста: как только страница загрузилась — окно выпрыгнуло, как чертик из табакерки.
Код он вставил и решил проверить. Запустил — работает! Окно исправно появляется, все красиво и правильно.
Но, как и любой житель буржуинии (а заказчик — американец), он помешан на всяких там совместимостях, соответствиях стандартам и прочей подобной фигне. Поэтому он решил опробовать свое творение в различных броузерах.
Opera, Safari и FireFox показали одинаково красивые результаты. Но это американца не успокоило — надо же попробовать и на "флагмане ИТ-индустрии" - Internet Explorer'е. Ну и конечно тут возникла проблема. Точнее даже две.
Первая достаточно простая — найти тот самый интернет эксплорер (в простонародье - "ишак"). Дело в том, что, как и многие нормальные иностранцы, этот товарищ работает на макинтоше и, естественно, ишака там нет. Там сафари — всё умеет, со всем совместим, всё поддерживает и все им довольны.
Вторая проблема посерьезнее — когда он все же нашел машину с виндой, выяснилось, что в ишаке окно почему-то не выпрыгивает. Более того, сам ишак матерится на какую-то ошибку, толком не говоря, какую именно. Будто бы это военная тайна.
Собственно с этой проблемой американец и обратился ко мне.
Не буду рассказывать как я убивал час за часом пытаясь выяснить, что именно майкрософтовскому детищу не нравится и какие слова при этом из меня выходили — вы и сами догадаетесь. Скажу лишь, что подружить iBox с IE 6 мне так и не удалось.
Но причину такого упорного нежелания работать мне все же удалось выяснить.
Дело в следующем. Перед использованием функционала iBox, этой библиотеке нужно что-то там внутри себя проинициализировать. И в процессе инициализации она заранее создает несколько div'ов , которые позже используются для построения разных окошек. Но, как все вы знаете, DIV'ы можно создать только после того, как DOM страницы полностью загружена.
Как отловить этот момент? Правильно — привязаться событию onLoad тэга . Но ведь на этом же событии у нас уже висит обработчик, который поставил заказчик....
Ситуация такова: все нормальные броузеры начинают обрабатывать JavaScript-код (загруженный в секции
нашей HTML-страницы) ПЕРЕД обработкой самой страницы. Поэтому код iBox в них прикрепляется в очередь обработчиков первым — до нашего iBox.showURL. Соответственно и выполняется он раньше нашего вызова. Таким образом получается, что, к моменту вызова iBox.showURL, библиотека уже проинициализирована и готова к работе.Ишак же делает все наоборот — сперва пытается обработать наш вызов (и получает ошибку ведь компоненты библиотеки еще не готовы к работе), а уж потом проинициализировать саму библиотеку. Такой вот нелепый финт ушами. Никакие попытки обойти или изменить это поведение не привели к успеху, ишак — он и в африке ишак.
Итог: убито несколько часов, выпито много кофе, высказано много лестного в адрес Билла и компании, и лишний раз укреплена уверенность в том, что мелкомягкие думают задним местом, через которое у них потом все и работает.
Бабах Большой Адронный Коллайдер!
БАБАААХХХХХ!
Дым рассеивается, у ворот рая стоят Равшан и Джумшут в белых халатах и в очках. Открываются ворота. Выходит Апостол Петр (Светлаков)
- Э, вы че тут делаете?
- А, щьто делаим? Э ми тут...
- Я вас спрашиваю, что у вас там бабахнуло?
- Бабащнуль, да сильна, бабащнуль белемге калайдер сламался, нащяльника...
- Коллайдер? Да вы там ваще охренели что ли? Да вы поняли, что вы там натворили? Вы нахрена его ваще строили?
- Хигис деляли...
- Какой еще хигис?
- Бозонма хигис делали... Адин сделали, фтароой сделали, и вместе их два один сделали...
- Вы их че, столкнули что ли?
- Нет, нащяльника, защема сталкнули... Проста разагнали быстра... ощеня быстра... они сами станлкнулися, нащяльника... а патооом, патооом эжембе пещельбехъ бихтимиле шайтанама!
- Ну вы ваще придурки! Ну нахрена вам это было надо? Еще один Большой Взрыв захотели?
- Зрыв бальшой, нащяльника, ощеня бальщой зрыв, шайтан - бабащнуль калайдерма кирьдихълар..
- Ну, хрен с вами, заходите, экспериментаторы, блин.
- А там еще за нами потом заходить будут...
- Вы че, идиоты, кроме себя еще кого-то угробили?
- Защем угробили...? Не угробили, там калайдерма сламался...
- Ладно, сколько вас там?
- Щесь милиардав... С половинама...
Давайте померяемся... знаниями!
Бесконечные просторы интернета радуют все новыми и новыми открытиями. Сегодня, например, нашел интересный измеритель знаний PHP - http://www.corp.mamba.ru/test/index.phtml.
По-сути это просто тест из 36 вопросов с вариантами ответов. Правда я не совсем согласен с названием, т.к. вопросы там касаются не только PHP, но и HTML, MySQL, Apache и т.д. Но как вариант проверки, стоит ли пытаться наняться на работу PHP-прграммистом, этот тест просто незаменим.
Кроме того, пройдя тест (если Вы - зарегистрированный пользователь), Вы сможете на своем сайте расположить специальный баннер и хвастаться друзьям и знакомым. Вот "живой" пример:
А ну, давайте, кто больше?!