Совершенно неожиданно для себя, я открыл серьезный глюк в моем любимом Jquery. Если бы мне кто-то сказал, что функция определения версии броузера $.browser.version работает неправильно, я бы спорил на что угодно, что он неправ. Но....
Как известно, все познается на практике. Я совершенно случайно сделал такой финт:
alert('Browser version: '+ $.browser.version);
Каково же было мое удивление, когда я увидел на экране моего броузера IE8 попап: «Browser version: 6.0»!
Я немного погуглял и выяснилось – да, действительно, вражеская бажина... Для всех IE > 6 выводится, что текущая версия експлорера - 6.
Посмотрев множество решений проблемы, перечитав кучу статей, я собрал воедино все лучшее и переопределил для JQuery метод $.browser.version. Чтобы и у вас все работало правильно, необходимо переопределить в $(document).ready обработку таким образом:
(function($) {
var userAgent = navigator.userAgent.toLowerCase();
var ie_version = -1;
if (navigator.appName == 'Microsoft Internet Explorer') {
var re = new RegExp("msie ([0-9]{1,}[\.0-9]{0,})");
if (re.exec(userAgent) != null)
ie_version = parseFloat(RegExp.$1);
}
$.browser = {
version: (ie_version>-1)?ie_version:(userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1],
safari: /webkit/.test( userAgent ),
opera: /opera/.test( userAgent ),
msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
};
})(jQuery);
Коментарии в коде думаю не понадобятся, тут все предельно ясно: для ИЕ надо использовать отдельное регулярное выражение. Так как дефолтное работает неправильно.