0

私はこれを構築するための最良の方法を見つけようとしています。外部のHTMLページをアプリに読み込んでいます。ページをデータで埋めるpageinit関数があります。これで電話のジオロケーションも取得したいのですが、cordovaを使用する準備ができているデバイスを確認する必要があります。コルドバの準備ができたときに関数が起動することを確認するにはどうすればよいですか?

次のようなものがありますが、毎回「コード:2、メッセージ:ジオロケーションサービスを開始できませんでした」というアラートが表示されます。

var onSuccess = function(position) {

    $('#latnlng').html(position.coords.latitude + ', ' + position.coords.longitude );
};

function onFailure(error){
    alert('code: ' + error.code + '\n' +
          'message: ' + error.message + '\n');
}

jq( document ).delegate("#singleCompany", "pageinit", function() {
    retrieveCompany("527378C0D3465729A2F0B8C063396C5D");

    navigator.geolocation.getCurrentPosition(onSuccess,onFailure);
});

私はそれを以下と組み合わせる必要があると思いますが、どのようにかわからない

document.addEvenListener("deviceready", onDeviceReady, false);

function onDeviceReady(){
navigator.geolocation.getCurrentPosition(onSuccess,onFailure);
}
4

2 に答える 2

1

navigator.geolocation...イベントハンドラーからコードを削除し、pageinitイベントハンドラー内で実行する必要がありdevicereadyます。devicereadyCordovaが公開するジオロケーションAPIは、イベントが発生するまで利用できません。

例えば:

jq( document ).delegate("#singleCompany", "pageinit", function() {
    retrieveCompany("527378C0D3465729A2F0B8C063396C5D");
});

document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady(){
    navigator.geolocation.getCurrentPosition(onSuccess,onFailure);
}

アップデート

単一のページ(開始ページではない)に対してのみジオロケーションコードを実行するには、devicereadyイベントが発生したかどうかを判断するためのフラグを設定できます。

例えば:

var isDeviceReady = false;
function onDeviceReady(){
    isDeviceReady = true;
}
document.addEventListener("deviceready", onDeviceReady, false);

jq( document ).delegate("#singleCompany", "pageinit", function() {
    retrieveCompany("527378C0D3465729A2F0B8C063396C5D");

    if (isDeviceReady) {
        navigator.geolocation.getCurrentPosition(onSuccess,onFailure);
    } else {
        //here you could set an interval to check the value of `isDeviceReady` and then call the geo-location code when it is set to `true`
    }
});
于 2012-10-10T17:02:05.127 に答える
0

実際、Worklightを使用している場合は、コードを配置するか、wlEnvInitまたはwlCommonInit関数内から関数を呼び出すとうまくいきます。

于 2012-10-11T07:03:45.990 に答える