Исправление ошибки ThickBox в IE7 и IE8
2010.01.27
Столкнулись с ошибкой компонента ThickBox в браузерах IE7 и выше. Проблема заключается в том, что фреймворк JQuery не всегда корректно определяет версию браузера (точнее это связано с DTD типом документа - сильно в источник проблемы не вдавался), из-за чего неправильно срабатывает функция ThickBox (строки 282-287):
function tb_position() {
$("#TB_window").css({marginLeft: '-' + parseInt((TB_WIDTH / 2),10) + 'px', width: TB_WIDTH + 'px'});
if ( !if ( !(jQuery.browser.msie && jQuery.browser.version < 7)) { // take away IE6
$("#TB_window").css({marginTop: '-' + parseInt((TB_HEIGHT / 2),10) + 'px'});
}
}
В результате всплывающее окно в IE7 и IE8 позиционируется неправильно.
Ошибка заключается в том, что в некоторых случаях jQuery.browser.version возвращает некорректный результат и браузер ошибочно определяется как IE6.
Для исправления ошибки надо более точно определять версию браузера. Для этого введем дополнительный параметр:
$.browser.msie6 = $.browser.msie
&& /MSIE 6\.0/i.test(window.navigator.userAgent)
&& !/MSIE 7\.0/i.test(window.navigator.userAgent)
&& !/MSIE 8\.0/i.test(window.navigator.userAgent);
Он будет определять является ли браузер - IE6.
Таким образом исправленная функция tb_position() будет выглядеть следующим образом:
function tb_position() {
$("#TB_window").css({marginLeft: '-' + parseInt((TB_WIDTH / 2),10) + 'px', width: TB_WIDTH + 'px'});
$.browser.msie6 = $.browser.msie && /MSIE 6\.0/i.test(window.navigator.userAgent) && !/MSIE 7\.0/i.test(window.navigator.userAgent) && !/MSIE 8\.0/i.test(window.navigator.userAgent);
if ( !(jQuery.browser.msie6)) { // take away IE6
$("#TB_window").css({marginTop: '-' + parseInt((TB_HEIGHT / 2),10) + 'px'});
}
}