2012-10-10 2 views
0

저는 이것을 구조화하는 최선의 방법을 찾으려고합니다. 내 애플 리케이션에 외부 HTML 페이지를로드하고있다. 일부 데이터 페이지를 채우는 pageinit 함수가 있습니다. 이걸로 휴대 전화의 위치 정보를 가져오고 싶지만 코드 바를 사용할 준비가되어 있는지 확인해야합니다. 코드 코바 준비가 완료되면 함수가 실행되는지 어떻게 확인할 수 있습니까?jquery mobile with cordova with pageinit

다음과 같은 내용이 있지만 매번 "코드 : 2, 메시지 : Geolocation 서비스를 시작하지 못했습니다."라는 경고가 표시됩니다.

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); 
} 

답변

1

당신은 pageinit 이벤트 핸들러에서 navigator.geolocation... 코드를 제거하고 deviceready 이벤트 핸들러 내부에서 실행하는 방법을 확실입니다. deviceready 이벤트가 발생하기 전까지는 Cordova에서 공개하는 지리 위치 API를 사용할 수 없습니다. 예를 들어

:

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

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

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

UPDATE

단일 페이지에 대한 지리적 위치 코드 (즉, 시작 페이지가 아닌) 당신이 여부를 결정하는 플래그를 설정할 수 있습니다를 실행하려면 deviceready 이벤트가 발생했습니다. 예를 들어

: 당신이 작업등을 다음 코드를 넣거나 트릭을 할 것입니다 wlEnvInit 또는 wlCommonInit 함수 내에서 함수를 호출 사용하는 사실 경우

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` 
    } 
}); 
+0

하지만 #singleCompany '페이지'에 대해서만 어떻게 코드를 실행합니까? – David

+0

@David 내 대답의 업데이트를 확인하십시오. – Jasper

+0

두 번째 옵션을 사용하려면 부울 대신 전역 지연을 사용할 수 있습니다. 그렇게하면 설문 조사를하지 않아도됩니다. 하지만 더 간단한 해결책은 geolocation을 pageinit에두고 onDeviceReady/wlCommonInit에서 페이지를로드하는 것입니다. 그렇게하면 페이지가로드 될 때 코드가 준비되었음을 알 수 있습니다. –

0

.

+0

흥미 롭습니다. 이 예를 보여 주시겠습니까? – David

+0

코드를 Worklight 초기화 함수 안에 넣을 수 있습니다. 장치가 준비되고 페이지가 준비된 후에 만 ​​호출됩니다. –