トップ回答者
一部のUser-AgentでASP.NETの<script>タグが生成されない

質問
-
マシン: Windows Server 2008 R2
Webサーバー: IIS 7.5 ASP.NET4.0 C#
初めまして。
ASP.NETでの開発をしております。
通常、ASP.NETで作成したページでポストバック機能を使用した場合、動的に生成されたページにはscriptタグが埋め込まれ、__doPostBack()が実装されると思います。
IEやGoogle ChromeでWebページにアクセスした場合は問題ないのですが、一部の特殊なブラウザからアクセスした場合、scriptタグが埋め込まれていないページが生成されます。
調べたところ、ブラウザが送るリクエストのHTTPヘッダのUser-Agentが、Mozilla等の割と有名なものの場合はscriptタグが埋め込まれており、そうでない場合は駄目なようです。(ちなみに私が使用しているブラウザはBTSmartBrowserというUser-Agentで、ハンディターミナルという機器上で動作するものです。)
どうやらIISサーバー側でUser-Agentを見てscriptタグを生成するかしないかを決めているように思われるのですが、どこでその設定をしているのかわかりません。
とりあえず、web.configのsystem.web要素内にclientTargetというタグを追加してUser-Agentを追加すれば良いらしいという記事を見つけ、試したのですが、どうやらこれは違っていたようです。
何か似たような事例をご存知の方、ご教示頂ければと思います。
よろしくお願い致します。
回答
-
ASP.NET Web サーバー コントロールとブラウザーの機能に一通りの説明がされています。HttpCapabilitiesBase.EcmaScriptVersionが1.0に満たない場合、<script>タグを生成しないようです。リンク先にもありますが、App_Browserディレクトリでカスタムブラウザーを定義することになるのかな。
- 回答としてマーク 山本春海 2011年8月30日 8:59
-
> web.configのsystem.web要素内にclientTargetというタグを追加してUser-Agent
> を追加すれば良いらしいという記事を見つけ、試したのですが、どうやらこれは
> 違っていたようです。web.config に定義を追加した後、Page.ClientTarget プロパティに追加した定義の
エイリアスは設定されたのでしょうか?例えば、
<clientTarget> <add alias="ie6" userAgent="Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1)" /> </clientTarget>
のように定義したのであれば、当該 aspx ページの @ Page ディレクティブに、ClientTarget="ie6"
を追加してみてください。そうすると、ブラウザの検出機能が無効になり、ページ
は指定したエイリアスと関連付けられたブラウザ機能(上記の場合 IE6 相当)を
使用します。試しに、ClientTarget="uplevel" と設定してみたらどうなりますか? uplevel は
デフォルトで定義済みのブラウザ機能で、ASP.NET 4 の場合 IE6 相当です。ちなみに
EcmaScriptVersion は 3.0 となります。clientTarget 要素 (ASP.NET 設定スキーマ)
なお、もし BTSmartBrowser 以外はブラウザの自動検出機能を有効にしておきたい場合
は、以下のようなクラスを作って使うのがいいと思います。public class CBaseMasterEvents : System.Web.UI.Page { public CBaseMasterEvents() { Page.PreInit += new EventHandler(CBaseMaster_PreInit); } private void CBaseMaster_PreInit(object sender, EventArgs e) { if (Page.Request.Browser.Browser.Contains("BTSmartBrowser")) { Page.ClientTarget = "uplevel"; // または定義したエイリアス } } }
- 編集済み SurferOnWww 2011年8月19日 4:38 リンク修正
- 回答としてマーク 山本春海 2011年8月30日 8:59
すべての返信
-
ASP.NET Web サーバー コントロールとブラウザーの機能に一通りの説明がされています。HttpCapabilitiesBase.EcmaScriptVersionが1.0に満たない場合、<script>タグを生成しないようです。リンク先にもありますが、App_Browserディレクトリでカスタムブラウザーを定義することになるのかな。
- 回答としてマーク 山本春海 2011年8月30日 8:59
-
> web.configのsystem.web要素内にclientTargetというタグを追加してUser-Agent
> を追加すれば良いらしいという記事を見つけ、試したのですが、どうやらこれは
> 違っていたようです。web.config に定義を追加した後、Page.ClientTarget プロパティに追加した定義の
エイリアスは設定されたのでしょうか?例えば、
<clientTarget> <add alias="ie6" userAgent="Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1)" /> </clientTarget>
のように定義したのであれば、当該 aspx ページの @ Page ディレクティブに、ClientTarget="ie6"
を追加してみてください。そうすると、ブラウザの検出機能が無効になり、ページ
は指定したエイリアスと関連付けられたブラウザ機能(上記の場合 IE6 相当)を
使用します。試しに、ClientTarget="uplevel" と設定してみたらどうなりますか? uplevel は
デフォルトで定義済みのブラウザ機能で、ASP.NET 4 の場合 IE6 相当です。ちなみに
EcmaScriptVersion は 3.0 となります。clientTarget 要素 (ASP.NET 設定スキーマ)
なお、もし BTSmartBrowser 以外はブラウザの自動検出機能を有効にしておきたい場合
は、以下のようなクラスを作って使うのがいいと思います。public class CBaseMasterEvents : System.Web.UI.Page { public CBaseMasterEvents() { Page.PreInit += new EventHandler(CBaseMaster_PreInit); } private void CBaseMaster_PreInit(object sender, EventArgs e) { if (Page.Request.Browser.Browser.Contains("BTSmartBrowser")) { Page.ClientTarget = "uplevel"; // または定義したエイリアス } } }
- 編集済み SurferOnWww 2011年8月19日 4:38 リンク修正
- 回答としてマーク 山本春海 2011年8月30日 8:59