Как проверить с помощью jquery, работает ли Internet Explorer в режиме совместимости

Поскольку jQuery.browser устарел, а jQuery.support является рекомендуемым инструментом для решения проблем с браузером, каков рекомендуемый способ решения следующей проблемы?

Полноэкранная тема jquery-плагина Galleria работает некорректно (неправильное позиционирование изображения) в IE ‹ 8 и в режиме просмотра, совместимом с IE 8 и 9. Doctype — это HTML 5, и отключение этого режима с помощью

<meta http-equiv="X-UA-Compatible" content="IE=edge"> 

выполняет свою работу, но как мне правильно использовать jQuery.support, проверьте, является ли версия IE ‹ 8 или представление совместимости каким-то образом все еще включено (потому что тогда мы используем другая тема для этих пользователей)?

Обновление: вот код, который мы используем сейчас (внизу html).

<script type="text/javascript">
    $(document).ready(function () {
        if ($.browser.msie && $.browser.version < 8) {
            Galleria.loadTheme('js/galleria/themes/classic/galleria.classic.min.js');
            $("#gallery").galleria({
            /* ... */
            });
        } else {
            Galleria.loadTheme('js/galleria/themes/fullscreen/galleria.fullscreen.min.js');
            $("#gallery").galleria({
            /* ... */
            });
        }
    });

</script>

person Olaf    schedule 03.01.2012    source источник
comment
Разве вы не можете просто использовать правильный тип документа и убедиться, что страница отображается в стандартном режиме, а не в режиме совместимости? Что-то вроде: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">.   -  person jfriend00    schedule 03.01.2012
comment
Вы не должны проектировать свою веб-страницу так, чтобы она функционировала в нескольких режимах. Вы должны выбрать режим, для которого хотите создать дизайн, указать его и не беспокоиться о других режимах. Если зритель переводит страницу в другой режим, он получает то, что заслуживает.   -  person jfriend00    schedule 03.01.2012
comment
@jfriend00: Я использую HTML 5 ‹!DOCTYPE html›, и я думаю, что сделал это, ‹meta http-equiv=X-UA-Compatible content=IE=edge› делает именно это, поскольку переводит IE в стандартный режим.   -  person Olaf    schedule 03.01.2012
comment
@jfriend00: Вы можете спорить таким образом (хотя я, конечно, не стал бы, поскольку стараюсь сделать свой сайт как можно более совместимым), но это не решает проблему IE 7 и не отвечает на вопрос jquery.support.   -  person Olaf    schedule 03.01.2012
comment
Тогда удачи в проектировании для нескольких режимов. Это не должно быть чем-то, что вы должны делать, даже при проектировании для хорошей совместимости. Я не знаю, как определить режим в javascript, поэтому я не написал ответ. Вы можете проверить, есть ли у modernizr такая возможность, и посмотреть, как они это делают.   -  person jfriend00    schedule 03.01.2012


Ответы (3)


как мне правильно использовать jQuery.support проверить, является ли версия IE ‹ 8 или представление совместимости каким-то образом все еще включено?

jQuery.support предназначен не для определения версий браузера, а для обнаружения конкретных ошибок браузера. Если вы можете определить источник этой ошибки (возможно, проверенный свойством .boxModel?), вы могли бы вместо этого основывать свой оператор if на этой логике.

Обнаружение функций более надежно, чем просто определение версий браузера, поскольку в идеале тесты будут работать с любым браузером, в котором есть ошибки, а не только с браузерами семейства IE.

Если вы не хотите отслеживать источник этой ошибки браузера (и, таким образом, найти правильный .support тест), тогда эта ветка, кажется, дает немного более "полный" тест для определения версии браузера и режима совместимости.

Вот код из этой темы:

isIE8CompatMode() {
    return $.browser.msie
        && $.browser.version == 7.0
        && document.documentMode
        && document.documentMode == 8;
}

И, конечно же, вы, вероятно, захотите изменить это, чтобы использовать тесты < и >.

Он по-прежнему использует $.browser, но, похоже, также выполняет дополнительное обнаружение режима совместимости (через специфичное для IE свойство document.documentMode).

person Merlyn Morgan-Graham    schedule 03.01.2012
comment
Спасибо за объяснение о jQuery.support и подсказке .boxModel, которую я проверю. Код, который вы предоставили, работает для меня. - person Olaf; 03.01.2012

Это обычный javascript, а не jQuery. Вы можете использовать documentMode. См. здесь Определение режима совместимости документов. и здесь свойство documentMode.

person Rosdi Kasim    schedule 03.01.2012
comment
Спасибо, document.compatMode выглядит многообещающе. Хотя он выходит из контекста jquery. - person Olaf; 03.01.2012

Исходя из вышеизложенного, это то, что я использую для IE7 Document или IE7 Compatabilty.

var IE7BrowserMode = ($.browser.msie && $.browser.version == 7.0);
var IE7DocumentMode = ($.browser.msie && document.documentMode && document.documentMode == 7);
return( IE7BrowserMode || IE7DocumentMode );
person dmd733    schedule 17.05.2013
comment
Спасибо. Вариант ответа Мерлина. - person Olaf; 18.05.2013