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…

Артемий Трегубенко,
,

comments powered by Disqus