July 26, 2008

Internet Explorer, jQuery, AJAX … егати комбинацията

Няма такава боза като Internet Explorer. Просто няма. Супер непредсказуемо се дъни на най-неочакваните места, което прави дебъгването истински кошмар. Ето последното ми преживяване: работя върху интерфейс, който е супер тежко натоварен със всякакви AJAX и DHTML красоти, и който е много важно да работи навсякъде. Най-големия помощник в тази задача е jQuery, който работи супер стабилно навсякъде, и може да ти спести по-голямата част от cross-compatibility проблемите при “мултиплатформеността” да се работе с много браузъри. За съжаление, това не винаги помага. При рутинна проверка за това как върви интерфейса под IE6, излиза следната грешка:

Could not complete the operation due to error 80020101

При проверка с IE7, отново на същото място от тестовете излиза същата грешка. Така, супер описателно съобщение, нали … Преравям интернета да търся хора с моя проблем, и да видя как може да се реши, обаче не намерих нищо — само оплаквания, и разни хленчения по форумите. Ами като не мога да го реша проблема, да пробвам да го заобиколя, а ? Грешката се проявява, когато jQuery получи като резултат от AJAX заявка HTML, който след това се инжектира в кода. Всичко това се прави супер кадърно от jQuery, като кода който ще се инжектира се проверя за <script> блокове, които се интерпретират (т.е. eval()-ват се), така че всичко работи все едно че кода си е бил там още при зареждането на страницата. Първо проверих дали кода е валиден (`щото IE има навика да забива при определина счепина структура), а длед това започнах да махам едно по едно нещата от кода и да гледам кога няма да се появи грешката. За мой късмет махнах <script>-овете първо, и след като видях, че проблема не е от викането на външни *.js файлове, оказа се че именно eval()-натите блокове чупят нещата. Тестването обаче ми разгонва фамилията, защото се скъсах да цъкам докато стане време да се появи грешката. Както и да е, видях какво предизвиква проблема, и реших да тествам “контролно” дали IE по принцип имат проблеми с eval()-ването от AJAX отговори. Познайте … няма! Сега, познайте къде е проблема … в коментарите! Удивително, а ? Значи, от дълбока древност, при писането на JavaScript в inline блокове в кода винаги слагам HTML коментари. Верно, че главно античните браузъри имаха проблеми с показването на JavaScript-а, и заради това се слагат тези коментари. Има и други причини, но те изглеждат много невероятни — като например някой да напише такъв CSS:

script {display: block;}

Както и да е. Имено тези коментари оцапват положението. Пример - ето това не работи:

<script  type="text/javascript"><!--//
alert(123);
//--></script>

а ето това работи:

<script  type="text/javascript">
alert(123);
</script>

Правете си изводите. Този тъп проблем го има не само в IE6, но и в IE7 (интересно има ли го в IE8). Никой друг браузър (Firfox 2, Firefox 3, Safari 3) не се чупи. Шибана мръстна групост.

June 26, 2008

Изпреварващо зареждане на изображения с jQuery

Наистина интересно решение на стар проблем, който така или иначе има алтернативи са справянето с него, но пък сега има такова с jQuery ;) Още повече, че основния фокус пада върху изображения, използвани в CSS файлове:

We recently put out a super handy jQuery plugin for pre-caching all images referenced in linked/imported CSS files.
It’s particularly useful for apps with overlays, yet-to-be embedded content, etc. It sure beats maintaining arrays of image paths or making complex CSS sprites.

Повече може да прочетете тук:

June 20, 2008

jsTree: jQuery-базиран компонент за дърво

Днес видях нещо на Ajaxian, което ми хареса. Наши момчета са написали този плъгин за jQuery с който може да се направи “дърво” — jsTree (да се илюстрира дървовидна структура). По-подробно представяне може са намерите тук:

самия проект може да намерите тук:

а демострация може да намерите ето тук:

Ще се радвам да виждам повече български проекти с отворен код. Поздрави на Иван Божанов и Илия Горанов за свършената работа.

June 16, 2008

jQuery UI 1.5: Effects, API, and Themes

Преди около седмица излезе новата версия на помощната библиотека към jQuery, а именно jQuery UI. Основните промени са в пренаписване на API-то, и подобрения при ефектите. Допълнително има инструмент за правене на сопбствени теми. Повече информация може да видите от официалното съобщение тук:

или като мен от страницата на Ajaxian:

June 8, 2008

jQuery Release 1.2.6

Толкова неща имам “задържани” като чернови, че тази събота и неделя се скъсах да пиша в блога. След това сигурно пак няма да влезе нищо за цял месец ;) Както и да е, да се фокусираме на интересните новини.

Последните седмици имаше две събития на които трябваше да обърна особенно внимание. И двете са нови версии — едното е новата версия на Kiax за която преди малко писах, а другото е новата версия на jQuery -  jQuery 1.2.6!

На прима виста се набива на очи скока от 1.2.3 на 1.2.6, което означава, че бая работа е хвърлена по новата версия — никой не прави такова прескачане само заради няколко оправени бъга. Най-голямата гордост на тази версия са подобренията в скороста, като най-важното е че работата със събитията е вече два пъти по-бърза. За мен (а и за коментара на Ajaxian от линка по-долу), е добавянето като core възможност да си мериш разстояния и отстъпи — нещо което преди беше на плъгин (нямам нищо против плъгините, просто поддържането на основния пакет е по-добро).

Повече може да прочетете тук:

PS. Пак се заканвам, че по-късно ще пиша по болната ми тема аз поддържанието на проект с отворен код, колко време отнема, колко работа, и т.н. Сигурно ще бъде супер егоистична оценката ми, но пък ще говоря от опит ;)

March 20, 2008

Смотаният IE…

Е няма такава боза като Internet Explorer … Поредната глупава издънка, която вчера трябваше да се търси и оправя. Има JavaScript, който е закачен за $(document).ready(), който пък създава нови елементи в DOM дървото. Под Firefox всичко е ок, но в IE след показването на новите елементи браузърът показва предупреждение с надпис "Operation Aborted", и след това показва страница за грешка, все едно адреса който се опитвате да заресите не съществува. Супер, супер тъпо.

Какво се оказа - въпреки че сме се закачили към събитието, което се пуска когато страницата е заредена, това време е прекалено рано за IE за да започне да рисува нови DOM елементи. Решението - да се отложи извикването на функцията закачена към това събитие с таймаут от две секунди! Е не е ли тъпо ?

March 13, 2008

Secrets of JavaScript Libraries

January 15, 2008

jQuery 1.2.2 Released

jQuery има нова версия, 1.2.2, която по принцип е bug fix версия.

Най-важните промени са:

  • 300% по-бърз $(DOMElement)
  • .ready() подобрение: използва се техниката на Diego Perini която не разчита на document.write(), а вместо това изчаква и CSS да се зареди; също така сега може да се наблюдава document.ready събитието използвайки традиционния начин с .bind()
  • нови събития като .bind(”mouseenter”) и .bind(”mouseleave”)
  • развита :not() функция
  • използването на Accepts Headers
  • подобрения па Event API: jQuery.event.special със setup teardown handler

От тук може да изтеглите последната версия в оригиналния и вид, а от тук нейния минифициран вариант.

September 11, 2007

Query v1.2

Има нова версия - Query v1.2 - за повече подробности прочетете поста на Ajaxian, защото сега нямам време да пиша:

August 24, 2007

Сортиране на таблици с jQuery

Такова нещо не ми се е налагало да ползвам от 2003-та и 2004-та или някаде там, и това новото много ми хареса - а пък и jQuery ми е малко новата страст :)

Tablesorter подрежда HTML таблици с код, малък колкото един ред, и с много функции за напреднали като:

  • Сортиране по много колони
  • Писане на нови парсери за клетките на таблиците
  • Разширяване на възможностите чрез widget система
  • Поддръжка на ROWSPAN и COLSPAN за TH елементите

Всичко това пакетирано в 7.4KB код. Плюс две “теми” за форматиране на външния вид на таблиците, специален widget за запомняне на настройките в Cookies, widget за премахване на редове и plugin за странициране.

Повече информация тук и тук.

August 8, 2007

jQuery за 15 минути

Саймън Уилсън (Simon Willison) публикува кратка и “сочна” презентация, jQuery in 15 minutes.

Ако до сега не сти има случай да хвърлите едо око на jQuery, сега определено ще видите в тази презентация най-силните му страни, като:

  • Защо jQuery е толкова интересно ?
  • Как се работи в него със CSS селекторите (CSS selectors)
  • Дискретната му природа (за разлика от някои популарни библиотеки, които бъркат в мозъка на JS-engine-а)
  • Как всичко опира до плъгините (plugins)

April 8, 2007

Visual jQuery

Ето това е невероятния сайт, който служи като jQuery документация. Просто е супер!