Tom Adler’s blog

маргиналы против тормозных счётчиков

разнообразные счётчики, которыми обвешивают страницы в интернете, нередко чувствительно тормозят загрузку страницы. Например, в жж-инбоксе кнопка удаления всех сообщений не будет работать до тех пор, пока не прочухается top@mail.ru. Казалось бы, у хакера все козыри на руках: счетчики можно безжалостно порезать многими способами. Но если ты используешь оперу, и не хочешь ухудшать её статистику, чтобы ленивые разработчики всё же тестировали в ней сайты, приходится терпеть тормоза

хотя, наверное, в рунете у оперы и так крепкие позиции, так что отечественных тормозов можно и отключить

mozilla firefox и потайной параметр lateness

в ajax-приложениях часто бывает нужно выполнить некий запрос при инициализации, и потом повторять его каждые несколько секунд. Первый вызов иногда выполняет некоторые дополнительные действия, не нужные при последующих вызовах. Мне это удобно делать вот так:

function makeRequest(firstcall) {
    if (firstcall) { … }
}

makeRequest(true);
setInterval(makeRequest, 10000);

однако в firefox этот код будет работать неожиданным образом — параметр firstcall будет задан при каждом вызове функции! В этом легко убедиться, выполнив на какой-нибудь странице код javascript:void(setTimeout(alert, 2000)).

увидев эти случайные числа в первый раз, я решил, что из-за бага firefox берёт мусор откуда-то из стека, и запостил тикет. Очень скоро выяснилось, что это это не баг: при вызове функции из setInterval/setTimeout firefox передаёт ей тайным, нигде не описанным параметром lateness величину задержки, с которой сработал таймер в этот раз. Это было добавлено в NN3, и ещё 9 (девять!) лет назад разработчики решили «ну пусть останется для совместимости». Я до сих пор думал, что семь лет — рекорд : )

за эти девять лет в документации не появилось ни слова об этой «фиче», а интернет (и багзилла) наполнились жалобами удивленных разработчиков. Но программисты мозиллы по-прежнему собираются добавить этот параметр в документацию, а потом и в стандарт, хотя редактор спеки html5 уже сказал, что в стандарте этого не будет.

ещё одна малопригодная особенность firefox, о которой нужно помнить : (

а вы говорите, opera…

,

замыкания в firefox небезопасны

в яваскрипте замыкания часто используются для эмуляции private-свойств объектов. В следующем примере внешний код, имея доступ к a, никогда не сможет узнать значение b:

a = (function(){
    var b = 123;
    return function(){ b; }
})()

однако, на это нельзя рассчитывать при использовании firefox — в нём можно передать в eval вторым параметром контекст выполнения кода:

eval('c = b', a)

это можно считать проявлением большей гибкости, но мне это кажется очередным неудобным исключением, о котором нужно помнить

update: ага, уже в 3.1 этого не будет

,

прогресс openid, oauth

жить стало лучше, жить стало веселей!

OAuth for Google Data APIs — все эти АПИ теперь умеют авторизацию по oauth

Microsoft are accepting OpenID for their new HealthVault site — пусть с некоторыми ограничениями, но о них хорошо написал Simon Willison в статье «The point of “Open” in OpenID»

,

новые user javascripts

на этой неделе я ударился в улучшение своей среды обитания — браузера : )

в предыдущем посте рассказывал о «Locationbar²-like url segments navigator», а теперь к нему добавилось еще несколько user javascripts:

Autofill openid text fields
достаточно просто кликнуть поле для ввода openid — и в него автоматически подставится ваш openid
Clear text input field button
если поставить курсор в текстовое поле, рядом с ним появится кнопка «очистить это поле» — очень удобно в линуксе для копипаста мышью
Clear text input field with mouse gesture
та же функциональность, что у предыдущего, но на один клик быстрее: достаточно перетащить мышь со страницы на поле ввода с зажатой левой кнопкой
Disable '1' and '2' hotkeys in Google Reader
оперой очень удобно управлять с клавиатуры; среди прочих хоткеев есть 1 и 2, которые используются для перехода к следующему/предыдущему табу; гуглоридер пытается блокировать их для собственных целей, а этот скрипт не даёт ему этого сделать

а ещё мне только что привезли новый комп, буду делать апгрейд! : )

, ,