web-dev-qa-db-ja.com

ブラウザがchromeまたはエッジかどうかを確認します

私の現在のウェブサイトはChromeブラウザでのみ実行されます。これを行うには、次の方法で確認しました

if (Request.Browser.Browser == "Chrome")
{
   // Allow
}

しかし Edge の場合も"Chrome"としてのみ返されます。

Chromeブラウザのみからのアクセスを許可するにはどうすればよいですか?

14
Shaggy

Microsoft Edgeのユーザーエージェント文字列に_Edge/version_が含まれているため、ユーザーエージェントを確認してMicrosoft Edgeかどうかを確認できます。

_//get user agent somehow here based on what you are working on
userAgent = Request.UserAgent;

if (userAgent.IndexOf("Edge") > -1)
{
   // maybe client's browser is Microsoft Edge
}
_

edgeユーザーエージェント文字列のサンプル

Mozilla/5.0 (X11; CrOS x86_64 6783.1.0) AppleWebKit/537.36 (KHTML, like Gecko) Edge/12.0

もっと見る ここここ

最後に、ユーザーエージェントに基づいて機能するのではなく、ブラウザーで機能検出を使用することをお勧めします。

19
Hamid Pourjam

私は興味があります-ユースケースは何ですか?とにかく、ここに行きます:

Microsoft Edge UA文字列:

Mozilla/5.0(Windows NT 10.0)AppleWebKit/537.36(KHTML、like Gecko)Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136

このブログ投稿で理由を詳しく説明します。

Neowinは最近、Windows 10、Spartan用のMicrosoftの新しいブラウザーがChrome UA string、“ Mozilla/5.0(Windows NT 10.0; WOW64)AppleWebKit/537.36( GeckoのようなKHTML)Chrome/39.0.2171.71 Safari/537.36 Edge/12.0″。それは意図的に行われます。

また、文字列全体が「Edge/12.0」で終わっていることにも気づくでしょう。Chromeはそうではありません。

これは、MicrosoftがIE 11を使って行ったこととは異なり、Windows 8ではMozilla/5.0(Windows NT 6.3; Trident/7.0; rv: 11.0)この投稿で説明されているGeckoのように。

ユーザーエージェントのスニッフィングとは何ですか?

多くの場合、Web開発者はブラウザ検出のためにUAスニッフィングを行います。 Mozillaはブログでそれをよく説明しています:

異なるブラウザに異なるWebページまたはサービスを提供することは、通常、悪い考えです。ウェブは、使用しているブラウザやデバイスに関係なく、誰でもアクセスできるように設計されています。特定のブラウザーをターゲットにするのではなく、機能の可用性に基づいて段階的に機能を強化するWebサイトを開発する方法があります。

ユーザーエージェントの履歴を説明するすばらしい記事です。

多くの場合、怠惰な開発者は、UA文字列をスニッフィングし、ビューアが使用していると信じているブラウザに基づいて、Webサイトのコンテンツを無効にします。 Internet Explorer 8は開発者にとって共通のフラストレーションポイントであるため、開発者はユーザーがIEのいずれかのバージョンを使用しているかどうかを頻繁に確認し、機能を無効にします。

これについては、エッジチームのブログでさらに詳しく説明しています。

すべてのユーザーエージェント文字列には、トークンだけでなく「意味のある」バージョン番号など、実際に使用しているブラウザーよりも他のブラウザーに関する情報が多く含まれています。

Internet Explorer 11のUA文字列:

Mozilla/5.0(Windows NT 6.3; Trident/7.0; rv:11.0)のようにGecko

Microsoft Edge UA文字列:

Mozilla/5.0(Windows NT 10.0)AppleWebKit/537.36(KHTML、like Gecko)Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136

UserAgentプロパティは、W3Cディスカッションで、Patrick H. Laukeによって「成長し続ける嘘のパック」として適切に説明されています。 (「むしろ、実際に有用で正確な情報を少し伝えながら、古いUAスニッフィングコードがすぐに転用されない十分なレガシーキーワードを追加するバランシング行為。」)

Web開発者はUAスニッフィングをできるだけ回避することをお勧めします。最新のWebプラットフォーム機能は、ほとんどすべて簡単に検出できます。過去1年間、Microsoft Edgeを検出するように更新されたUAスニッフィングサイトがいくつかありました。これは、レガシーIE11コードパスを提供するためだけです。 Microsoft EdgeはIE11の動作ではなく「WebKit」の動作と一致するため、これは最良のアプローチではありません(Edge-WebKitの違いは、修正が必要なバグです)。

私たちの経験では、Microsoft Edgeはこれらのサイトの「WebKit」コードパスで最適に動作します。また、さまざまなデバイスでインターネットが利用できるようになったため、不明なブラウザが適切であると想定してください。サイトが現在既知の少数のブラウザでのみ動作するように制限しないでください。これを行うと、サイトはほぼ確実に機能しなくなります。

結論

Chrome UA文字列を提示することで、これらの開発者が使用しているハックを回避して、ユーザーに最高のエクスペリエンスを提供できます。

2
if(HttpContext.Current.Request.UserAgent.Contains("Edge"))
{
   // Allow
}

私のために働いた。

1
meJustAndrew

JavaScriptエラーをログに記録するときは、ブラウザー検出を使用します。エラーがどのブラウザーで発生したかを知るのに役立ちます。

元々 この質問 から私はApp_Browsersフォルダのエントリを使用しました:

<browser id="Edge" parentID="Chrome">
  <identification>
    <userAgent match="Edge/(?'version'(?'major'\d+)(?'minor'\.\d+))" />
  </identification>
  <capabilities>
    <capability name="browser" value="Edge" />
    <capability name="version" value="${version}" />
    <capability name="majorversion" value="${major}" />
    <capability name="minorversion" value="${minor}" />
  </capabilities>
</browser>

しかし、これは一貫性がなく、時々報告されたChrome=なので、このラッパークラスをさらに使用します:

using System.Web;

public class BrowserInfo
{
    public BrowserInfo(HttpRequestBase request)
    {
        if (request.Browser != null)
        {
            if (request.UserAgent.Contains("Edge")
                && request.Browser.Browser != "Edge")
            {
                Name = "Edge";
            }
            else
            {
                Name = request.Browser.Browser;
                Version = request.Browser.MajorVersion.ToString();
            }
            Browser = request.Browser;
            Platform = request.Browser.Platform;
            IsMobileDevice = request.Browser.IsMobileDevice;
            if (IsMobileDevice)
            {
                Name = request.Browser.Browser;
                Name = request.Browser.Browser;
            }
        }
    }

    public HttpBrowserCapabilitiesBase Browser { get; }
    public string Name { get; }
    public string Version { get; }
    public string Platform { get; }
    public bool IsMobileDevice { get; }
    public string MobileBrand { get; }
    public string MobileModel { get; }
}
0
AGB