Обнаружение IE11 с помощью С#
Перед загрузкой веб-страницы я обнаруживаю браузер и версию, чтобы определить совместимость.
Итак, если браузер меньше IE7, я показываю несовместимое сообщение.
Тестирование веб-страницы в IE11 на моей веб-странице отображает несовместимое сообщение.
В настоящее время я получаю имя браузера:
var browser = Request.Browser.Browser;
а версия из
var version = Request.Browser.Version;
Затем я проверяю, что браузер - это IE и версия >= 7.
Я считаю, что пользовательский агент изменился для IE11.
Итак, что лучше всего определить, если браузеp >= IE7 с помощью С#.
EDIT:
Request.Browser.Browser возвращает имя браузера, например. IE. Request.Browser.Version возвращает номер версии. Я добавляю их в объект BrowserVersion, который у меня есть, и сравниваю эти значения с массивом поддерживаемых версий браузера, которые у меня есть. то есть.
private static List<BrowserVersion> m_supportedBrowsers = new List<BrowserVersion>()
{
new BrowserVersion("IE", 7),
new BrowserVersion("Firefox", 3),
new BrowserVersion("AppleMAC-Safari", 5),
new BrowserVersion("Safari", 5)
};
где BrowserVersion - это просто объект, который имеет 2 строковых свойства (имя и версия).
Ответы
Ответ 1
Да, пользовательский агент изменился на это:
Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko
Наиболее важной частью здесь является удаление токена MSIE и добавление, как Gecko. Это означает, что Internet Explorer предпочтет быть идентифицированным как браузер типа Gecko, если его не идентифицировать как себя (поэтому старые IE-хаки не будут применяться к нему). Если вы хотите идентифицировать его как IE, вы должны искать токен Trident, а версия - через маркер rv.
Теперь все вышеперечисленное следует учитывать только в том случае, если по какой-либо причине вам нужно проверить пользовательский агент на стороне сервера. Для использования резервных копий JavaScript, полифонов HTML5 и т.д. Вы должны проверить, поддерживается ли данная функциональность в коде на стороне клиента (есть библиотеки, которые помогают с такими, как например Modernizr).
Ответ 2
Я только что установил IE11 для предварительного просмотра Windows 7, и мой код тоже сломался. После некоторого быстрого тестирования я заметил, что строка для браузера теперь отличается. Теперь он возвращается как "InternetExplorer" вместо "IE".
Теперь этот код работает для меня.
private void CheckIfUsingSupportedBrowser(HttpContext context)
{
bool isBrowserSupported = ((context.Request.Browser.Browser == "IE" || context.Request.Browser.Browser == "InternetExplorer") && context.Request.Browser.MajorVersion >= 7) ||
(context.Request.Browser.Browser == "Firefox" && context.Request.Browser.MajorVersion >= 13) ||
(context.Request.Browser.Browser == "AppleMAC-Safari" && context.Request.Browser.MajorVersion >= 5) ||
(context.Request.Browser.Browser == "Safari" && context.Request.Browser.MajorVersion >= 5) ||
(context.Request.Browser.Browser == "Chrome" && context.Request.Browser.MajorVersion >= 13);
if (!isBrowserSupported)
{
Navigator.Navigate(PageKeys.SupportedBrowsers);
}
}
Ответ 3
Я экспериментировал с IE11 и MVC, и выясняется, что IE11 идентифицирует себя как Request.Browser.Browser = "Mozilla" и MajorVersion = 0. Надеюсь, что это поможет.
Ответ 4
Какую версию .NET Framework вы используете? Из моего анализа, похоже, что версии менее 4,5 не могут распознать IE 11 как браузер Internet Explorer.
Ответ 5
Информация Request.Browser
основана на файлах определения браузера, которые находятся здесь на моей машине.
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\браузеры
Тот, который для Internet Explorer называется ie.browser
.
Я вижу, что Internet Explorer 11 и более поздние версии обрабатываются совсем по-другому во всех предыдущих версиях. Для предыдущих версий существует базовое определение с именем IE
, которое в свою очередь основано на Mozilla.
<browser id="IE" parentID="Mozilla">
Существует цепочка зависимостей для всех предыдущих версий, которые можно проследить до IE
. Вот пример этой цепочки.
<browser id="IE10Plus" parentID="IE6Plus">
Internet Explorer 11, с другой стороны, имеет другую родословную и основан непосредственно на Mozilla
.
<browser id="InternetExplorer" parentID="Mozilla">
IE, и поэтому все версии до Internet Explorer 11 (ни одно из которых не отменяет это значение) используют следующее определение для возможности browser
.
<capability name="browser" value="IE" />
Internet Explorer 11 и более поздних версий выполните следующие действия.
<capability name="browser" value="InternetExplorer" />
Подводя итог, если вас интересует любая версия Internet Explorer, вам нужно будет использовать что-то похожее на следующее.
Request.Browser.Browser == "IE" || Request.Browser.Browser == "InternetExplorer"
Чтобы затем определить конкретную версию, вы должны ссылаться на свойство Request.Browser.Version
. Это заполняется прямо из строки пользовательского агента, передаваемой браузером. Однако здесь не так, что есть разница между Internet Explorer 11 и более поздними и предыдущими версиями.
//Versions prior to Internet Explorer 11.
<userAgent match="MSIE (?'version'(?'major'\d+)(\.(?'minor'\d+)?)(?'letters'\w*))(?'extra'[^)]*)" />
//Internet Explorer 11 and later.
<userAgent match="Trident/(?'layoutVersion'[7-9]|0*[1-9]\d+)(\.\d+)?;(.*;)?\s*rv:(?'version'(?'major'\d+)(\.(?'minor'\d+)))" />
Версия - это бит после MSIE
для предыдущих версий и бит после rv:
для Internet Explorer и более поздних версий.
В последней версии .NET Framework должны быть указаны правильные файлы определений браузера, но похоже, что некоторым из более старых может потребоваться исправление чтобы получить его.
Обновление: Я ссылался на версии Internet Explorer 11 и более поздних версий через текст выше. Более поздние версии, вероятно, Edge. Я до сих пор не видел файл определения браузера, но подозреваю, что он будет другим.