13

Web ページをロードする前に、ブラウザとバージョンを検出して互換性を判断しています。

そのため、ブラウザが IE7 未満の場合、互換性のないメッセージが表示されます。

IE11 で Web ページをテストすると、Web ページに互換性のないメッセージが表示されます。

私は現在、ブラウザ名を次から取得しています。

var browser = Request.Browser.Browser;

からのバージョン

var version = Request.Browser.Version;

次に、ブラウザが IE で、バージョンが 7 以上であることを確認します。

IE11ではユーザーエージェントが変わったと思います。では、C# を使用してブラウザが >= IE7 であるかどうかを検出する最良の方法は何ですか。

編集:

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 つの文字列プロパティ (名前とバージョン) を持つ単なるオブジェクトです。

4

5 に答える 5

15

Windows 7 Release Preview 用の IE11 をインストールしたところ、コードも壊れました。いくつかの簡単なテストの後、ブラウザーの文字列が異なることに気付きました。「IE」ではなく「InternetExplorer」として返されるようになりました。

このコードは今私のために働くようです。

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);
    }
}
于 2013-09-18T19:20:27.883 に答える
6

私は IE11 と MVC を試してきましたが、IE11 は自分自身を Request.Browser.Browser = "Mozilla" および MajorVersion = 0 として識別していることがわかりました。

于 2013-12-04T15:23:55.553 に答える
2

このRequest.Browser情報は、私のマシンのここにあるブラウザー定義ファイルに基づいています。

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\Browsers

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 です。そのためのブラウザ定義ファイルはまだ見たことがありませんが、また違うのではないかと思います。

于 2015-09-04T10:07:51.730 に答える