WebSurfer's Home

トップ > Blog 1   |   ログイン
APMLフィルター

ClientTarget の利用

by WebSurfer 2014年6月14日 16:20

ClientTarget を利用すると ASP.NET によるブラウザの判定を自由に設定できます。

下の画像は、IE9 でアクセスして(一番上の行の HttpRequest.UserAgent プロパティで取得した User Agent 参照)、HttpBrowserCapabilities が Firefox30 と判定されている例です。

ClientTarget の利用

例えば、開発環境で IE11 を持ってなくても、IE11 でアクセスした場合に ASP.NET がどのような html や JavaScript をレンダリングするかを調べるなどに役立つと思います。

ただ、User Agent を偽装するなら Fiddler2 を使えばもっと簡単にできます。なので、あまり使い道はないかもしれませんが、せっかく調べたので書いておきます。

web.config の clientTarget 要素の add 子要素 に任意のブラウザのエイリアスと User Agent を設定します。

ASP.NET 4 の場合、ルート(C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config)の web.config を調べてみると、uplevel と downlevel が定義済みでした。

しかし、appcmd コマンドで調べてみると、以下の画像の通り、uplevel と downlevel に加えて、何故か ie4 と ie5 も定義されています。自分で ie4 と ie5 の定義を追加した覚えはないのですが・・・

デフォルトの clientTarget 要素

ところが、@ Page ディレクティブの ClientTarget 属性で ie4 を指定すると "ClientTarget が無効なエイリアス 'ie4' に設定されています。<clientTarget> 構成セクションは ClientTarget エイリアスを定義するために使用されます。" というエラーになります。(ie5 も同様にエラー。uplevel と downlevel は問題なし) 理由はどうしても分かりません。(汗)

やむをえず、以下のように一旦全て clear して、ie4, ie5, uplevel, downlevel を定義しなおし、IE11 と Firefox30 の定義を追加して検証しました。

<clientTarget>
  <clear/>
  <add alias="ie4" 
    userAgent="Mozilla/4.0 (compatible; MSIE 4.0; Windows NT 4.0)"/>
  <add alias="ie5" 
    userAgent="Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 4.0)"/>
  <add alias="uplevel" 
    userAgent="Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.1)" />
  <add alias="downlevel" 
    userAgent="Generic Downlevel" />
  <add alias="ie11" 
    userAgent="Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko"/>
  <add alias="ff30" 
    userAgent="Mozilla/5.0 (Windows NT 6.0; rv:30.0) Gecko/20100101 Firefox/30.0"/>
</clientTarget>

Page.ClientTarget プロパティ のページに書いてありますように、@ Page ディレクティブの ClientTarget 属性に、上の alias 属性に指定された文字列を設定すると、ASP.NET によるブラウザ検出機能が無効になり、userAgent 属性に指定された User Agent 文字列を使ってブラウザが判定されます。

一番上の画像のページの例では @ Page ディレクティブ で ClientTarget="ff30" としているので、実際にアクセスしているのは IE9 ですが、Firefox30 の User Agent でブラウザ判定が行われ、その判定結果が HttpBrowserCapabilities オブジェクトに反映されています。

一番上の画像を出力したコードを参考にアップしておきます。

protected string GetBrowswerCapabilities()
{
    HttpBrowserCapabilities browser = Request.Browser;
    StringBuilder sb = new StringBuilder();
    sb.Append("User Agent: " + Request.UserAgent + 
        "<br /><br />");
    sb.Append("HttpBrowserCapabilities are:<br />");
    sb.AppendFormat("Type = {0}<br />", 
        browser.Type);
    sb.AppendFormat("Name = {0}<br />", 
        browser.Browser);
    sb.AppendFormat("Version = {0}<br />", 
        browser.Version);
    sb.AppendFormat("Major Version = {0}<br />", 
        browser.MajorVersion);
    sb.AppendFormat("Minor Version = {0}<br />", 
        browser.MinorVersion);
    sb.AppendFormat("Platform = {0}<br />", 
        browser.Platform);
    sb.AppendFormat("Is Beta = {0}<br />", 
        browser.Beta);
    sb.AppendFormat("Is Crawler= {0}<br />", 
        browser.Crawler);
    sb.AppendFormat("Is AOL = {0}<br />", 
        browser.AOL);
    sb.AppendFormat("Is Win16 = {0}<br />", 
        browser.Win16);
    sb.AppendFormat("Is Win32 = {0}<br />", 
        browser.Win32);
    sb.AppendFormat("Supports Frames = {0}<br />", 
        browser.Frames);
    sb.AppendFormat("Supports Tables = {0}<br />", 
        browser.Tables);
    sb.AppendFormat("Supports Cookies = {0}<br />", 
        browser.Cookies);
    sb.AppendFormat("Supports VBScript = {0}<br />", 
        browser.VBScript);
    sb.AppendFormat("Supports JavaScript = {0}<br />", 
        browser.EcmaScriptVersion.ToString());
    sb.AppendFormat("Supports Java Applets = {0}<br />", 
        browser.JavaApplets);
    sb.AppendFormat("Supports ActiveX = {0}<br />", 
        browser.ActiveXControls);
    return sb.ToString();
}

Tags:

ASP.NET

About this blog

2010年5月にこのブログを立ち上げました。主に ASP.NET Web アプリ関係の記事です。

Calendar

<<  2024年4月  >>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

View posts in large calendar