web-dev-qa-db-ja.com

navigator.geolocation.getCurrentPositionが常に失敗するchromeおよびFirefox

「navigator.geolocation.getCurrentPosition」Webページをテストしようとすると、奇妙な動作が発生しました。これが私のテスト結果とコードです:

私のコード:

function detectLocation() 
{
  if (navigator.geolocation) 
  {
    navigator.geolocation.getCurrentPosition(geocodePosition, onError, { timeout: 30000 });
    navigator.geolocation.watchPosition(watchGeocodePosition);
  } 
  else 
  {
    onError();
  }
}

この関数は、「body」onloadイベントが呼び出されたときに実行されました。タイムアウトを10000と20000に変更しようとしましたが、それでも同じ結果が得られました。また、クロームとFirefoxが自分の場所を取得できるようにしました。

結果:

  1. chrome(v 17.0.963.79 m))を使用すると、navigator.geolocation.getCurrentPositionが呼び出されたときに、結果は常にonError関数に送られます。
  2. Firefox(v 10.0.2)を使用すると、navigator.geolocation.getCurrentPositionが呼び出されたとき、結果は常にonError関数に送られました。
  3. IE(v 9)を使用すると、結果は素晴らしかったです。現在の場所を取得しました。

誰かがこの奇妙な状況で私を助けることができますか?私は本当にこの問題を解決する考えがなく、プロジェクトの締め切りを急いでいました。前に感謝します。

編集:この数日間、いくつかの進歩がありました。エラーコードコードは2で、メッセージ "https://maps.googleapis。 com/maps/api/browserlocation/json?browser = chromium&sensor = true ':応答の形式が正しくありませんでした "。まだ解決されていませんが、これを解決する方法を知っている人はいますか?

11
John Hexis

この問題をシミュレートしたところ、成功コールバック関数は、htmlページがWebサーバーでホストされている場合にのみ呼び出され、ファイルシステムから開かれた場合には呼び出されないことがわかりました。

テストするために、C:ドライブから直接ファイルを開いたところ、コールバックが機能せず、インターネットインフォメーションサービス(IIS)でファイルをホストし、コールバックが機能しました。

<html>
<body onload="detectLocation()">
<!-- This html must be hosted on a server for navigator.geolocation callbacks to work -->

<div id="status"></div>

<script type="text/javascript">
function detectLocation()
{
  log("detectLocation() starting");
  if (navigator.geolocation)
  {
    log("navigator.geolocation is supported");
    navigator.geolocation.getCurrentPosition(geocodePosition, onError, { timeout: 30000 });
    navigator.geolocation.watchPosition(watchGeocodePosition);
  }
  else
  {
    log("navigator.geolocation not supported");
  }
}
function geocodePosition(){
    log("geocodePosition() starting");
}

function watchGeocodePosition(){
    log("watchGeocodePosition() starting");
}

function onError(error){
    log("error " + error.code);
}
function log(msg){
    document.getElementById("status").innerHTML = new Date() + " :: " + msg + "<br/>" + document.getElementById("status").innerHTML;
}
</script>
</body>
</html>
16
ajayel

私もこのメッセージを受け取りました:

メッセージ:「 'https://www.googleapis.com/'のネットワークロケーションプロバイダー:返されたエラーコード404。」、コード:2

Wi-Fiアダプターをオンにすることで解決できます

12
lukassteiner

私も同じ問題を抱えていました。 Chromeブラウザは30000ミリ秒のタイムアウトで位置を返しません。Firefoxも位置を返しませんでした。オプションenableHighAccuracyを追加してfalseに設定しましたが、何も変更されていません(falseがデフォルトのオプションです)。 trueに変更すると、ジオロケーションが機能し始めました!
これが私の最後のコードです。

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(
            function(position) {
                // Get current cordinates.
                positionCords = {"lat": position.coords.latitude, "lng": position.coords.longitude};
            },
            function(error) {
                // On error code..
            },
            {timeout: 30000, enableHighAccuracy: true, maximumAge: 75000}
    );
}  
8

Httpではなくhttpsを使用する必要があります。

Chromeこれに関するリファレンスはこちら- https://developers.google.com/web/updates/2016/04/geolocation-on-secure-contexts-only =

1
Chris Halcrow

私はこれが古いトピックであることを知っていますが、最近私はこのエラーも発生しました:

message: "Network location provider at 'https://www.googleapis.com/' : Returned error code 404.", code: 2

修正は、グーグルマップのAPIキーを取得してコードで使用することです

<script src='https://maps.googleapis.com/maps/api/jscallback=initMap &signed_in=true&key=YOUR-API-KEY' async defer></script>

ここでAPIキーを取得できます: https://developers.google.com/maps/documentation/javascript/get-api-key#key

0
Combine

私は同じ問題を抱えていました、そして解決策はモバイルネットワークが有線ネットワークより遅いのでタイムアウト期間を増やすことでした

 {timeout: 30000, enableHighAccuracy: true, maximumAge: 75000}

セルラーポジショニングを可能にするとともに

[デバイス設定]で、[Wifiと携帯電話の位置]オプションをオンにします。

0
Hitesh Sahu