jQuery, определение браузера
7 июля 2008
Заметил, что jQuery.browser.version неверно определяет версию IE. Седьмой считается шестым.
Ошибка уже в трэкере, но ещё не поправлена:
http://dev.jquery.com/ticket/1867
http://dev.jquery.com/ticket/2661
http://dev.jquery.com/ticket/2413
user-agent, отдаваемый IE7 сменился с последними обновлениями на:
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)
Соответственно регулярка совпала с MSIE 6.0.
Мораль: user-agent — штука ненадёжная. Лучше проверять наличие объектов, например:
//IE6 if (window.external && (typeof window.XMLHttpRequest == "undefined")) { //… }
Комментарии RSS по email OK
Код определения браузера в jQuery невероятно глючный. Что неудивительно учитывая такие user-agent, к тому же сторонние приложения вносят свою лепту user-agent, к примеру, раньше был баг когда наличие Mail.Ru Agent путалось с Opera, насколько я помню там в регулярке было /ra/ (сократили объем кода типа :)
Оно, кажется, там и сейчас есть…
Для определения версии IE обычно использую условные комментарии:
в результате вычисления этого нехитрого выражения в переменной ie будет лежать номер версии IE начиная с 5 (IE5.5), правда IE8b определяется как IE7, но это пока что не актуально. В случае использования нормального браузера, переменная ie равна 0. Идею взял отсюда.
Блин, при постинге код порезало, там еще после умножения на 10 вычисляется остаток от деления на 10
И при чём тут Java?
А что это не java написано???
(javascript != java)
Andy, написано на Java, но тема про JS :)