Когда IE8 не IE8, что такое $.browser.version?

IE8 может перейти в режим IE7, если это необходимо. Как jQuery определяет это? В частности, каково значение $.browser.version?


person nickf    schedule 19.08.2009    source источник


Ответы (5)


IE8 в режиме IE7 сообщит IE7. НО вы можете проанализировать пользовательский агент и проверить наличие "Trident/4.0". Если вы видите эту строку, значит, вы работаете с IE8.

person DmitryK    schedule 19.08.2009
comment
IE 8 в стандартном режиме IE7 по-прежнему сообщает 8.0 из $.browser.version. - person bart; 21.11.2012

Объект $.browser заполняется с использованием концепции, известной как Browser-Sniffing. Проще говоря, это процессы, сканирующие данные из строки пользовательского агента, которую отправляют браузеры, роботы и все, что обращается к странице.

Из-за восприимчивости пользовательского агента к подделке этот объект устарел в более поздних версиях jQuery. Обнаружение объектов и обнаружение функций (см. $.support) теперь используются предпочтительно.

Например Опера 8.5. используется для идентификации себя как IE: http://www.javascriptkit.com/javatutors/navigator.shtml

$.поддержка:

http://docs.jquery.com/Utilities/jQuery.support

Агенты пользователя:

http://en.wikipedia.org/wiki/User_agent

http://www.zytrax.com/tech/web/browser_ids.htm

Обнаружение объектов:

http://www.quirksmode.org/js/support.html http://developer.apple.com/internet/webcontent/objectdetection.html

Сниффинг браузера:

http://en.wikipedia.org/wiki/Browser_sniffing

Обнаружение функции:

http://docs.jquery.com/Utilities/jQuery.support

person James Wiseman    schedule 19.08.2009
comment
хорошо, да, это хорошо, но какое из свойств support говорит мне, правильно ли IE поддерживает inline-block? leadingWhitespace, tbody, objectAll, htmlSerialize, style, hrefNormalized, opacity, cssFloat, scriptEval, noCloneEvent, boxModel - person nickf; 19.08.2009
comment
Не уверен, что кто-то из них сделал бы это. Вы можете попробовать расширить функцию .support (см. пример по адресу: waytoocrowded.com/ 2009/03/14/jquery-supportminheight), или, может быть, кто-то уже расширил это. Хотя для меня это немного неизведанная территория. - person James Wiseman; 19.08.2009

Я только что проверил это сам (только что скачал IE8)

Когда вы переводите IE8 в режим совместимости с IE7 с таким метатегом:

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

Значение $.browser.version по-прежнему равно 8,0!

person nickf    schedule 28.08.2009

JQuery может видеть только то, что ему сообщает браузер.

В режиме IE7 браузер будет сообщать о себе как о IE7, так что это то, что увидит JQuery.

person Guffa    schedule 19.08.2009
comment
И то, что говорит браузер, может быть ложью - person James Wiseman; 19.08.2009
comment
Ну типа... В режиме IE7 все должно быть так, как будто браузер действительно IE7. Браузер сообщает версию механизма рендеринга, а не фактическую версию программы. - person Guffa; 19.08.2009

Я разработчик .NET, и мне всегда нравится использовать страницу Sessions.aspx, которую я создан для такого рода проблем

Не стесняйтесь использовать его, я также могу поделиться кодом.

как вы можете видеть из этого скринкаста, который я только что сделал (14 секунд), вы получаете MSIE 8 и MSIE 7, указанные в свойстве javascript navigator, они меняются, когда вы меняете режим совместимости, так как движок, который отображает страницу, немного отличается (помните, что это не 100% двигатель IE7!)

вместо использования встроенного метода jQuery просто используйте обычный javascript

IE8 в режиме IE7

4.0 (совместимый; MSIE 7.0; Windows NT 6.0; WOW64; Trident/4.0; GTB6; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.30618; .NET CLR 3.5.30729; InfoPath.2; OfficeLiveConnector.1.4; OfficeLivePatch.1.3)

IE8 в собственном режиме

4.0 (совместимый; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0; GTB6; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.30618; .NET CLR 3.5.30729; InfoPath.2; OfficeLiveConnector.1.4; OfficeLivePatch.1.3)

код:

var browserVersion = navigator.appVersion.toLowerCase();
if(browserVersion.contains('msie 8') ) {
    // IE 8
}
else if(browserVersion.contains('msie 7') ) {
    // IE 7
}

Видео с экрана: http://www.balexandre.com/temp/showFlash.aspx?swf=2009-08-19_1138_ie8ie7.swf&w=952&h=742

person balexandre    schedule 19.08.2009
comment
Вау, эта страница сеансов очень устарела - person Kloar; 16.05.2013