none
ブラウザ定義ファイル(.browser)の適用順序と設定方法について RRS feed

  • 質問

  • はじめまして。こちらには初めて質問します。

    携帯向けのサイトの構築(開発)と運用管理をしています。
    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>



    わかりにくい書き方ですみません。
    よろしくお願いいたします。

    2009年3月31日 8:01

回答

  • 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
    2009年4月20日 3:04

すべての返信

  • refID を使ってみてはいかがでしょうか。

    <browser refID="Up">

    自PCで試した結果ですが、
    既存の定義ファイルに上書きするには
    parentID ではなくて
    refID しか使えないのかなという結果になりました。
    もしかしたら、
    既存の定義に一致しない、新しいユーザエージェントのパターンの場合は
    parentIDを使うイメージかもしれません。




    • 回答としてマーク みーとも 2009年4月20日 2:50
    • 回答としてマークされていない みーとも 2009年4月20日 2:50
    2009年4月20日 2:25
  • 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
    2009年4月20日 3:04