1

デフォルトのオペランドが JavaScript でどのように機能するかを理解したつもりでしたが、明らかに理解できませんでした。最初にユーザーの地理的位置を特定し、それらの座標を中心としたマップを読み込もうとしています。デバイスがこれらの座標を特定できない場合、いくつかのデフォルト値でマップをロードするだけにフォールバックします。

私のエラー メソッドでは、gMap.init()引数なしで呼び出していることに気付くでしょう。これは、変数latlonをそれぞれ 57.700992 と 11.893836 に設定する必要があることを意味すると考えました。代わりに、私は取得してUncaught TypeError: Cannot read property 'coords' of undefinedいます。どこが間違っていますか?

また、存在するtheApp.init()場合はマップを呼び出していますnavigator.geolocation。HTML5 ジオロケーションをサポートしていないブラウザーは、マップを読み込もうとさえしないということですか?

var gMap = {
    init: function (position) {

            var lat = position.coords.latitude || 57.700992,
                lon = position.coords.longitude || 11.893836,
                geocoder =  new google.maps.Geocoder(),
                mapOptions = {
                    zoom: 12,
                    center: new google.maps.LatLng(lat, lon)
                },
                map = new google.maps.Map(document.getElementById('mapcanvas'), mapOptions);

    },
    error: function () {
        console.log('failed to retrieve geoposition');
        gMap.init();
    }
}


var theApp = {
    init: function () {

        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(gMap.init, gMap.error, {timeout:10000});
        }

    }
}
4

2 に答える 2

1

orが未定義でない限り||そこにある は機能するはずです。その場合、未定義のオブジェクトのプロパティにアクセスしようとしているため、JavaScript はエラーをスローします。 オブジェクトが存在するかどうかを手動で確認する必要があります。 position.coordsposition

var lat, lon;
if(position && position.coords){
    lat = position.coords.latitude || 57.700992;
    lon = position.coords.longitude || 11.893836;
}

positionが定義されていない場合、 はifをチェックせずに中断しposition.coordsます。
(&&左側のパラメーターが false の場合、右側のパラメーターは評価されません)

はい、navigator.geolocation未定義の場合、マップはロードされません:

navigator.geolocation.getCurrentPosition(gMap.init, gMap.error, {timeout:10000});

この ^ は実行されgMap.initないので、実行されません。

于 2012-11-30T10:28:10.837 に答える
-1

試してみてください

 var lat = position.coords.latitude ? window['position'] != undefined : 57.700992,
 lon = position.coords.longitude ? window['position'] != undefined : 11.893836,

それ以外の||

于 2012-11-30T10:29:47.360 に答える