Firefox3.6 Beta3 より XPCOM 経由で geolocation が利用できるようになりました。

すでに御存じの方もいらっしゃるでしょうが、geolocation の XPCOM interface が Firefox3.6 beta3 より実装されました。

使い方は簡単です。以下にコードサンプルを紹介します。

var geolocation=Components.classes["@mozilla.org/geolocation;1"]
                            .getService(Components.interfaces.nsIDOMGeoGeolocation);
geolocation.getCurrentPosition(function(position){
    Application.console.log(position.coords.latitude+','+position.coords.longitude);
});

詳細はmozilla developer centerをごらんください。

6 件のコメント

  1. dynamis :

    geolocation XPCOM API の説明ありがとうございます。

    勝手ながらパーマリンクを英数字だけにする&コード部分を blockquote+pre から lang=”javascript” 属性付きの pre に直しておきました。

  2. Gomita :

    サンプルコード中に誤記がありました。
    Ccomponents > Components

  3. mitsugu :

    dynamis さん、修正ありがとうございます。
    Gomita さん、御指摘ありがとうございます。

  4. mitsugu :

     自分の拡張にジオロケーション機能をインプリメントして気がついたのですが、address interface がプロパティーを正しく返していません。以下のnightlyで確認できます。
     Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2b6pre) Gecko/20091206 Namoroka/3.6b6pre

     Bug 532535 として bugzilla に登録しましたが現時点で UNCONFIRMED となっているので、誰にでも再現性があるわけではないのかもしれません。

    1. mitsugu :

       Bug 532535 に追記しました。

       結論から言いますとこのバグは Firefox に起因するものではなく、Googleに起因するものと思われます。詳細は Bug 532535 を読んでいただければよいのですが、簡単にまとめます。

       Googleが address interface のプロパティのうち、一部のデータしか Firefox に返していないことを確認しました。私の自宅ではIPアドレスを元にして以下のようなデータが返されます ( デフォルト・ルートを元に緯度、軽度を求めているようで、緯度、経度共に自宅とは一致していませんので公開します )。

      {“location”:{“latitude”:34.817,”longitude”:135.567,”address”:{“country”:”日本”,”country_code”:”JP”},”accuracy”:25000.0},”access_token”:”x:xxxxxxxxx:xxxxxxxxxxxxx”}

       見ての通り “country” と “country_code” しか返ってきていません。
       また、デフォルトルートが変化すると Google から返ってくるデータの種類も変動しているような状況で、Google のサービスは非常に不安定であると言わざるを得ない状況です。
       現状では位置情報通知機能は緯度と経度以外の情報は、拡張からは使えないと言えそうです。通信が SSL で暗号化されているだけに残念です。

    2. mitsugu :

       お願いがあり書き込んでいます。もしこの書き込みが不適切であれば削除願います。あるいは御指摘いただければ削除致します。

      【依頼事項】
       bug 532535の再現テストに協力してほしい。

      【背景】
       自作拡張を新しいジオロケーション XPCOM interface に対応させようとしているときに、住所が XPCOM から返らない現象を発見した。さらに Namoroka nightly にデバッグ用のコードを入れ自家ビルドしてテストしたところ Google 側に不具合がある模様。

      【なぜ協力を依頼するのか】
      ・US では bug 532535 が発生しないかもしれない
      ・bug 532535 が発生するのは日本だけかもしれない
      ・bug 532535 が発生するのは私の環境だけかもしれない
      ・bug 532535 が存在するかぎり拡張ではジオロケーション機能を使うことができない

      【テストの手順】
      1. “hg clone http://hg.mozilla.org/releases/mozilla-1.9.2/ tmp” にてNamorokaリポジトリをクローン
      2. bug 532535 にアップロードされているNetworkGeolocationProvider.js に同ファイルを差し替える
      3. Namoroka をビルドする
      4. ビルドしたNamorokaを新規プロファイルで起動する
      5. bug 532535にアップロードされているbug532535.xpiをインストールする
      6. エラーコンソール出力を確認する

      【ノート】
       筆者の環境ではbug 532535にアップロードしているスクリーンショットが得られている。これによりGoogleが望ましいデータを返していないと考えている。