Appleのフォーラムに投稿されているようにSafariのgeolocationはどうもただしく動いているのか疑問。(これ最後の方でLANではなく無線にしたらうまくいったと書いてあるけど、自分は無線だけどだめだった。)
IEは省いて、FIREFOX・SAFARI・CHROME・OPERA・IPHONE・ANDROIDとほとんど普通のユーザが使うブラウザには対応していることになっているらしいので、ガラパゴス携帯的なキャリア毎の違いとかが(たぶん)無くてとてもありがたいなあと思うのですが、Safariだとなんかダメぽい。
Safari5.0.2を使っているんだけど、普通に位置情報が取れる時、取れないときと、何十秒とか掛けてようやく取れる時と3パターンある。そしてFireFoxやChromeでも、取れないこともあるし、少し(数秒とか)時間がかかる時はあるけど、Safariのようにうんざりするほど待たされる事は無い。
それからiPhoneのブラウザではあっさり短い時間で取れているように見える。
ちなみにFireFoxではgeolocationは内部的にGoogle Location Serviceというのを使っているとのこと。Chromeでも同じだった。
ということはSafariだけは違うのだろうか。でもtcpdumpで見るとどうも同じところに接続に行っているように見える。あんまり細かいことは調べていないしそういう知識も無いんだけど、単に
sudo tcpdump -i en1 port https
とやると、Safari, FireFox, Chromeどれでもnrt04s01-in-f104.1e100.netに繋いでいて、これはgoogleということみたいだ。
Safariが遅すぎるので、じゃあGoogleのAJAXのAPI ClientLocationを使うのはどうかというと、ClientLocationではかなり大雑把な値しか帰って来ない。(すくなくとも僕の家は新宿の方にあることになってしまう。実際は千駄ヶ谷にあってgeolocationではかなり正確に出る。というか正確すぎてビビる。)
というわけでもう眠いので今日はここ迄で、明日Safariでどうしたらいいのか調べてみようと思っているけど、多分SafariはClientLocationでやることになるかなあと思う。
というわけで、今また試しているのですが、なんか今日はSafariはうまく動いている。Chromeも動いている。FireFoxがなんだか変。timeout制限時間いっぱいまでかかってしかも結果は失敗となってしまった、何度もページをリロードするとかそういうのがいけないのだろうか。
とここまで来て知ったんだけど、Googleには2つの位置情報取得APIがあるのだな。そんでもって、それがGearsで提供されていて、それをFireFoxが使っているわけですね。
んで結論から言うと、PCの場合、timeoutはあんまり長くしないで、Geolocationで位置を取るようにしてみて、ダメならClientLocationを呼んでみる的なのが良いのかもしれない。
そんな風にしてとりあえずこのパズルを作りました。多分PCでもiPhoneでも動く。iPadやAndroidは多分動く。ガラケーは位置情報取得はまだ付けていないけどパズルは可能な状態です。
最終的にこうしようと思っています。GEOHEX
コメント