トップ回答者
ブラウザ定義ファイル(.browser)の適用順序と設定方法について

質問
-
はじめまして。こちらには初めて質問します。
携帯向けのサイトの構築(開発)と運用管理をしています。
NTTドコモ用、au(KDDI)用、SOFTBANK系(SOFTBANK/Vodafone/J-Phone)用の3種類の .browser を自作し、
自身のWebアプリケーションの App_Browsers フォルダに置いて、キャリア判定をしています。
最近、au(KDDI)の一部機種で、キャリア判定から漏れるものが出るようになりました。
調べてみると、いわゆる「定義済み」の .browser ファイルが更新され、新しいデバイスが追加されていたのですが
その中にマッチするパターンがあって、そちらのデバイスとして判定され、App_Browsers に定義したパターンは
評価すらしてもらえない状態になっていました。
具体的には、au(KDDI) のデバイスIDに "SH" が含まれる機種(おもにシャープ製なのかな?)です。
定義済み(%SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browsers)の中の1つである openwave.browser に
次のような定義がありました。
<browser id="Sh" parentID="Up">
<identification>
<capability name="deviceID" match="SH" />
</identification>
<capture>
</capture>
<capabilities>
<capability name="mobileDeviceManufacturer" value="Samsung" />
<capability name="mobileDeviceModel" value="Duette" />
</capabilities>
</browser>
これでは、デバイスIDに SH を含んでいる Up.Browser 系のデバイスはことごとく「サムスン製Duette」と判定されるうえ、
「定義済み」ブラウザ定義ファイルでデバイスの種類が確定しまうので App_Browser で再判定を行うには
ParentID="Sh" で定義しなければならなくなり、定義が複雑になってしまいます。
そこで、質問です。
(1) 次の私の認識は正しいでしょうか?
・ブラウザ定義ファイルの適用順序は、「定義済み」→「各自のWebアプリケーションにあるApp_Browsers」である。
(2) 次のような設定状態で、デバイスIDに "SH" を含むデバイスに myCarrierType=KDDI を与えるには
どうしたらよいでしょうか?(該当部分の前後は省略しています)
・parentID="Sh" でもうひとつ定義を書く
・定義済み openwave.browser を書き換えて aspnet_regbrowsers.exe -i を実行
・その他
[定義済み openwave.browser]
<browser id="Up" parentID="Default">
...
</browser>
<browser id="Sh" parentID="Up">
<identification>
<capability name="deviceID" match="SH" />
</identification>
...
</browser>
[App_Browsers]
<browser id="auKDDI_WAP20" parentID="Up">
<identification>
<userAgent match="^KDDI-" />
</identification>
...
<capabilities>
<capability name="myCarrierType" value="KDDI" />
</capabilities>
</browser>
わかりにくい書き方ですみません。
よろしくお願いいたします。
回答
-
koji sakamoto 様
返信いただきまして、ありがとうございます。
この質問を出したあと、どなたからもなかなかお返事がいただけなかったので
「.browser使っている人は少ないのかなぁ」と思いながら、実験を継続していました。
私も、koji sakamoto 様と同様の結論にたどり着きました。
(1) すでに定義されているブラウザ情報に、新たにプロパティを追加したり、プロパティを上書きしたりする場合は
<browser refID="~">
を利用する。
ID="Default" に近いブラウザ定義に上書きするようにすれば、同じ系統のブラウザに共通のプロパティを
設定することが可能
対象とするIDの選定には注意が必要
(2) すでに定義されているどれにもあてはまらない、または Default にしか当てはまらない新しいブラウザの場合には
<browser id="foo" parentID="hogehoge">
を利用する。
そして、もうひとつ、.browser の性質とでも呼んだらいいのでしょうか、こんな現象に遭遇しました。
(3) App_Browsers/*.browser のファイルを更新したり、aspnet_regbrowsers.exe -i を実行したりすると
通常はアプリケーションが持っているブラウザ定義も新しくなるが、場合によっては更新されないことがある
その場合は、App_Browsers/*.browser を更新した状態でアプリケーションを再度 "発行" し、バイナリを
すべて入れ替えることで、新しいブラウザ定義を保持するようになる
結局、そもそもの問題であった、au の SH を含む機種の判定方法は
(1) App_Browsers/my.browser に <browser refID="Up">~</browser> を追加する
(2) その状態でアプリケーションを "発行" し直し、バイナリファイルをすべて入れ替える
とすることで解決しました。
実験結果の(3)が、どんなときに発生するのかがまだ分かっておらず、ちょっと気持ちが悪いのですが
回避の手段は分かったので、とりあえずは解決かなぁと考えています。
ご協力いただきまして、ありがとうございました。- 回答としてマーク みーとも 2009年4月20日 3:05
すべての返信
-
koji sakamoto 様
返信いただきまして、ありがとうございます。
この質問を出したあと、どなたからもなかなかお返事がいただけなかったので
「.browser使っている人は少ないのかなぁ」と思いながら、実験を継続していました。
私も、koji sakamoto 様と同様の結論にたどり着きました。
(1) すでに定義されているブラウザ情報に、新たにプロパティを追加したり、プロパティを上書きしたりする場合は
<browser refID="~">
を利用する。
ID="Default" に近いブラウザ定義に上書きするようにすれば、同じ系統のブラウザに共通のプロパティを
設定することが可能
対象とするIDの選定には注意が必要
(2) すでに定義されているどれにもあてはまらない、または Default にしか当てはまらない新しいブラウザの場合には
<browser id="foo" parentID="hogehoge">
を利用する。
そして、もうひとつ、.browser の性質とでも呼んだらいいのでしょうか、こんな現象に遭遇しました。
(3) App_Browsers/*.browser のファイルを更新したり、aspnet_regbrowsers.exe -i を実行したりすると
通常はアプリケーションが持っているブラウザ定義も新しくなるが、場合によっては更新されないことがある
その場合は、App_Browsers/*.browser を更新した状態でアプリケーションを再度 "発行" し、バイナリを
すべて入れ替えることで、新しいブラウザ定義を保持するようになる
結局、そもそもの問題であった、au の SH を含む機種の判定方法は
(1) App_Browsers/my.browser に <browser refID="Up">~</browser> を追加する
(2) その状態でアプリケーションを "発行" し直し、バイナリファイルをすべて入れ替える
とすることで解決しました。
実験結果の(3)が、どんなときに発生するのかがまだ分かっておらず、ちょっと気持ちが悪いのですが
回避の手段は分かったので、とりあえずは解決かなぁと考えています。
ご協力いただきまして、ありがとうございました。- 回答としてマーク みーとも 2009年4月20日 3:05