0

我正在尝试找出构建它的最佳方法。我正在将外部 html 页面加载到我的应用程序中。我有一个 pageinit 函数,它用一些数据填充页面。我也想用这个来获取手机的地理位置,但我需要检查设备是否可以使用cordova。当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事件处理程序中运行它devicereadydeviceready在事件触发之前,Cordova 公开的地理位置 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 回答