разнообразные счётчики, которыми обвешивают страницы в интернете, нередко чувствительно тормозят загрузку страницы. Например, в жж-инбоксе кнопка удаления всех сообщений не будет работать до тех пор, пока не прочухается top@mail.ru. Казалось бы, у хакера все козыри на руках: счетчики можно безжалостно порезать многими способами. Но если ты используешь оперу, и не хочешь ухудшать её статистику, чтобы ленивые разработчики всё же тестировали в ней сайты, приходится терпеть тормоза
хотя, наверное, в рунете у оперы и так крепкие позиции, так что отечественных тормозов можно и отключить
в 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, о которой нужно помнить : (
в яваскрипте замыкания часто используются для эмуляции private-свойств объектов. В следующем примере внешний код, имея доступ к a, никогда не сможет узнать значение b:
a = (function(){
var b = 123;
return function(){ b; }
})()
однако, на это нельзя рассчитывать при использовании firefox — в нём можно передать в eval вторым параметром контекст выполнения кода:
оперой очень удобно управлять с клавиатуры; среди прочих хоткеев есть 1 и 2, которые используются для перехода к следующему/предыдущему табу; гуглоридер пытается блокировать их для собственных целей, а этот скрипт не даёт ему этого сделать
а ещё мне только что привезли новый комп, буду делать апгрейд! : )