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…