Google Maps APIで地図を作っています。http://withmama.lolipop.jp/kaihatsu/genzaiichi/hatena.html(ソースをご高覧ください) <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script>のように、sensor=trueとして 位置情報を取得して、取得した位置を地図の中心にします(IEは別処理をしていますので、Chromeでご高覧ください)。

しかし、位置情報の送信を「拒否」される場合もありますので、その際は外部jsを読み込む処理をしたいのですが結局正しいプログラムを追加(訂正)できませんでした。「拒否」される場合に読み込む外部jsは http://withmama.lolipop.jp/kaihatsu/genzaiichi/kyohi_syori.js です。
行き詰っています。どなたかご教示いただけませんか?

回答の条件
  • 1人10回まで
  • 13歳以上
  • 登録:2012/04/02 18:58:44
  • 終了:2012/04/06 19:12:57

ベストアンサー

id:Lhankor_Mhy No.1

Lhankor_Mhy回答回数779ベストアンサー獲得回数2312012/04/02 19:54:11

ポイント200pt

API仕様書によると、

   long watchPosition(in PositionCallback successCallback,
                      in optional PositionErrorCallback errorCallback,
                      in optional PositionOptions options);

ということですので、エラーハンドラでPERMISSION_DENIEDエラーを拾えばよいのではないかと思うのですが、それではダメでしたでしょうか?
 
追記。
サンプル書きました。
http://jsfiddle.net/nDxUr/

id:Lhankor_Mhy
navigator.geolocation.watchPosition(update);

上記の部分を以下のとおり変更。

navigator.geolocation.watchPosition(update,
  function(e){
    if (e.code==1) {
      $('head').append(
        $(document.createElement('script'))
          .attr('type', 'text/javascript')
          .attr('src','http://withmama.lolipop.jp/kaihatsu/genzaiichi/kyohi_syori.js')
      )
    }
  }
);

 
サンプル
http://jsfiddle.net/nDxUr/1/

2012/04/03 18:16:46
  • id:ozaki
    ご回答いただいたサンプルには、if(navigator.geolocation){
    navigator.geolocation.getCurrentPosition(succeed,failed);
    }
    function succeed(){}
    function failed(e){if (e.code==1) alert('denied')} とありますが、これを元のソースのどこかに挿入するのでしょうか? それともソースの一部を書き換えるのでしょうか?
    また、位置情報の送信を「拒否」された場合は、アラートを出すのではなく、http://withmama.lolipop.jp/kaihatsu/genzaiichi/kyohi_syori.js を読み込むようにしたいのですが・・・。
  • id:Lhankor_Mhy
    サンプルのコードをロードイベントで動作させて、アラートを出している部分でDOMにscript要素を追加すればいいだけだと思います。locationAPIを使ってらっしゃるので、ある程度のスキルがある人だとお見受けしていたのですが……、書けませんか?
  • id:Lhankor_Mhy
    回答に追記しますのでご覧下さい。
  • id:ozaki
    返信遅れてしまってごめんなさい。ご教示いただいたソースを使って、別のページを作ってみました。http://withmama.lolipop.jp/kaihatsu/genzaiichi/hatena2.html  
    おかげ様で、位置情報の取得の「許可」「拒否」の分岐は見事成功いたしました。また位置情報の取得を「許可」した場合は目的どおりの地図が表示されます。
    ところが、「拒否」した場合は、http://withmama.lolipop.jp/kaihatsu/genzaiichi/kyohi_syori.js にある地図が表示されず、ページには、地図のワクのようなものしか表示されません。
    もう少しです。お力をお貸しいただけませんか?
  • id:Lhankor_Mhy
    document.getElementById('map_canvas_kyohi') が null を返すからだと思います。
     
     
     
    質問から外れますが、こういう処理の時に動的にスクリプトを追加するのは、ちょっとどうなんだろうと思うやり方です。エラーのハンドリングもひとつのスクリプトに記述してしまったほうがいいと思います。
  • id:ozaki
    いろいろご教示、ありがとうございました。何とか解決することができました。感謝です!

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません