Обнаружение 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. Я до сих пор не видел файл определения браузера, но подозреваю, что он будет другим.