2013-08-22 44 views
10

Trước khi tải trang web Tôi đang phát hiện trình duyệt và phiên bản để xác định khả năng tương thích.Phát hiện IE11 với C#

Vì vậy, nếu trình duyệt nhỏ hơn IE7, tôi hiển thị thông báo không tương thích.

Kiểm tra trang web trong IE11 trang web của tôi đang hiển thị thông báo không tương thích.

tôi đang nhận được tên trình duyệt từ:

var browser = Request.Browser.Browser; 

và phiên bản từ

var version = Request.Browser.Version; 

sau đó tôi kiểm tra xem trình duyệt IE và các phiên bản> = 7.

Tôi tin rằng tác nhân người dùng đã thay đổi đối với IE11. Vì vậy, cách tốt nhất để phát hiện xem trình duyệt là gì = = IE7 sử dụng C#.

EDIT:

Yêu cầu.Browser.Browser trả về tên trình duyệt, ví dụ: I E. Request.Browser.Version trả về số phiên bản. Tôi thêm chúng vào một đối tượng BrowserVersion mà tôi có và so sánh các giá trị này với một mảng các phiên bản trình duyệt được hỗ trợ mà tôi cũng có. tức là

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) 
     }; 

nơi BrowserVersion chỉ là đối tượng có 2 thuộc tính chuỗi (tên và phiên bản).

+7

kiểm tra * chức năng * chứ không phải chính trình duyệt. – Tigran

+0

_ "Sau đó tôi kiểm tra xem trình duyệt là IE và phiên bản> = 7." _ - thì điều gì sẽ xảy ra? Làm thế nào để bạn kiểm tra điều này? _ "Tôi tin rằng tác nhân người dùng đã thay đổi đối với IE11" _ - bạn đã thử tìm chuỗi tác nhân người dùng hay cách thức 'Request.Browser' hoạt động? – CodeCaster

+0

Tại sao lại là downvote? –

Trả lời

10

Có user agent đã thay đổi như thế này:

Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko 

phần quan trọng nhất ở đây là việc loại bỏ các MSIE token và bổ sung các như Gecko. Điều này có nghĩa là Internet Explorer muốn được xác định là một trình duyệt kiểu Gecko nếu nó không được xác định là chính nó (vì vậy các hacks IE cũ sẽ không được áp dụng cho nó). Nếu bạn muốn xác định đó là IE, bạn phải tìm mã thông báo Trident và phiên bản đến qua mã thông báo rv.

Bây giờ, tất cả những điều trên chỉ nên được xem xét nếu bạn cần kiểm tra tác nhân người dùng ở phía máy chủ vì một số lý do. Để sử dụng dự phòng JavaScript, các polyfills HTML5, v.v., bạn nên kiểm tra xem chức năng đã cho có được hỗ trợ trong mã ở phía máy khách hay không (có các thư viện trợ giúp nó như ví dụ Modernizr).

11

Tôi vừa cài đặt IE11 cho Windows 7 Release Preview và mã của tôi cũng bị hỏng. Sau một số thử nghiệm nhanh, tôi nhận thấy rằng chuỗi cho trình duyệt hiện đã khác. Nó được trả về là "InternetExplorer" bây giờ thay vì "IE".

Mã này dường như hoạt động với tôi ngay bây giờ.

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

Nó thực sự là tâm-boggling rằng họ đã làm điều này .... không ai biết bất kỳ tài liệu chính thức về sự thay đổi này? – theycallmemorty

+1

@theycallmemorty Đây là một liên kết từ MS với một số lý do cho những thay đổi http://msdn.microsoft.com/en-us/library/ie/bg182625(v=vs.85).aspx –

+0

Cảm ơn, cuối cùng tôi gặp phải điều đó trong nghiên cứu của tôi nhưng quên đăng nó ở đây! – theycallmemorty

5

tôi đã được thử nghiệm với IE11 và MVC và nó chỉ ra rằng IE11 bản thân nó cũng Request.Browser.Browser = "Mozilla" và MajorVersion = 0. Hy vọng nó giúp.

0

Bạn đang sử dụng phiên bản .NET Framework nào? Từ phân tích của tôi, có vẻ như các phiên bản nhỏ hơn 4.5 không thể nhận ra IE 11 là trình duyệt Internet Explorer.

0

Thông tin Request.Browser dựa trên các tệp định nghĩa trình duyệt được đặt tại đây trên máy của tôi.

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Config \ Trình duyệt

Một cho Internet Explorer được đặt tên ie.browser.

Tôi có thể thấy rằng Internet Explorer 11 và phiên bản mới hơn được xử lý khá khác với tất cả các phiên bản trước. Đối với các phiên bản trước, có một định nghĩa cơ sở có tên là IE, lần lượt dựa trên Mozilla.

<browser id="IE" parentID="Mozilla"> 

Có một chuỗi phụ thuộc cho tất cả các phiên bản trước có thể truy ngược lại IE. Đây là một phần của chuỗi đó làm ví dụ.

<browser id="IE10Plus" parentID="IE6Plus"> 

Internet Explorer 11 trên Mặt khác, có một tổ tiên khác nhau và dựa trực tiếp trên Mozilla.

<browser id="InternetExplorer" parentID="Mozilla"> 

IE và do đó tất cả các phiên bản trước Internet Explorer 11 (không ai trong số đó ghi đè giá trị này) sử dụng định nghĩa sau cho khả năng browser.

<capability name="browser"    value="IE" /> 

Internet Explorer 11 trở lên sử dụng như sau.

<capability name="browser"    value="InternetExplorer" /> 

Để tóm tắt, nếu bạn quan tâm đến bất kỳ phiên bản nào của Internet Explorer thì bạn sẽ cần phải sử dụng một cái gì đó tương tự như sau.

Request.Browser.Browser == "IE" || Request.Browser.Browser == "InternetExplorer" 

Để xác định phiên bản cụ thể, bạn sẽ tham chiếu thuộc tính Request.Browser.Version. Điều này được điền trực tiếp từ chuỗi tác nhân người dùng mà trình duyệt vượt qua. Tuy nhiên, không phải ở đây, có sự khác biệt giữa Internet Explorer 11 và các phiên bản mới hơn và các phiên bản trước.

//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+)))" /> 

Phiên bản là bit sau MSIE cho các phiên bản trước và các bit sau rv: cho Internet Explorer và sau đó.

Phiên bản gần đây của .Net Framework phải bao gồm tệp định nghĩa trình duyệt chính xác nhưng có vẻ như một số tệp cũ hơn có thể yêu cầu hotfix để tải xuống.

Cập nhật: Tôi đã đề cập đến Internet Explorer 11 và các phiên bản mới hơn thông qua văn bản ở trên. Các phiên bản sau có lẽ là Edge. Tôi chưa từng thấy một tệp định nghĩa trình duyệt cho điều đó nhưng nghi ngờ rằng nó sẽ khác một lần nữa.