2013-08-22 3 views
10

Перед загрузкой веб-страницы я обнаруживаю браузер и версию, чтобы определить совместимость.Обнаружение IE11 с C#

Так что если браузер меньше IE7, я показываю несовместимое сообщение.

Тестирование веб-страницы в IE11 На моей веб-странице отображается несовместимое сообщение.

настоящее время я получаю имя браузера от:

var browser = Request.Browser.Browser; 

и версия от

var version = Request.Browser.Version; 

я затем проверить, что браузер IE и версии> = 7.

Я считаю, что пользовательский агент изменился для IE11. Так что лучший способ определить, является ли браузер> = IE7 с помощью C#.

РЕДАКТИРОВАТЬ:

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 строковые свойства (название и версия).

+7

проверить на * функциональность *, а не на сам браузер. – Tigran

+0

_ "Затем я проверяю, что браузер IE и версия> = 7." _ - то что происходит? Как вы это проверяете? _ «Я считаю, что пользовательский агент изменился для IE11» _ - пытались ли вы найти строку пользовательского агента или способ «Request.Browser»? – CodeCaster

+0

Почему downvote? –

ответ

10

Да агент пользователя изменен следующим образом:

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).

11

Я только что установил 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); 
    } 
} 
+2

Это действительно ошеломительно, что они это сделали ... Кто-нибудь знает какую-либо официальную документацию об этом изменении? – theycallmemorty

+1

@theycallmemorty Вот ссылка от MS с некоторыми причинами изменений http://msdn.microsoft.com/en-us/library/ie/bg182625(v=vs.85).aspx –

+0

Спасибо, я в конце концов столкнулся с этим в моих исследованиях, но забыл опубликовать его здесь! – theycallmemorty

5

Я ве экспериментировали с IE11 и MVC, и получается, что IE11 идентифицирует себя как Request.Browser.Browser = «Mozilla» и MajorVersion = 0. Надеюсь, что это помогает.

0

Какую версию .NET Framework вы используете? Из моего анализа, похоже, что версии менее 4,5 не могут распознать IE 11 как браузер Internet Explorer.

0

Информация, содержащаяся в файле 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 должны быть указаны правильные файлы определений браузера, но похоже, что некоторые из старых могут потребовать hotfix, чтобы получить его.

Обновление: Я упомянул Internet Explorer 11 и более поздние версии в тексте выше. Более поздние версии, вероятно, Edge. Я до сих пор не видел файл определения браузера, но подозреваю, что он будет другим.

Смежные вопросы