PhoneGap的deviceready事件未触发

4
我正在使用PhoneGap 1.5.0开发一个网页应用程序,但我无法触发deviceready事件。
我正在使用的cordova-1.5.0.js位于PhoneGap 1.5.0\lib\android\,但在多个Android设备上测试未成功。
<!DOCTYPE html>
<html>
  <head>
    <title>Device Properties Example</title>    
    <script type="text/javascript" charset="utf-8" src="cordova-1.5.0.js"></script>
    <script type="text/javascript" charset="utf-8">    

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

    function onDeviceReady() {
        alert("onDeviceReady");
    }

    </script>
  </head>
  <body>
    <p id="deviceProperties">Loading device properties...</p>
  </body>
</html>

你建议我如何检查错误日志? - Diogo Cardoso
通过Android Logcat。将您的设备连接到计算机,即可获取设备的日志。还请告诉我您正在尝试哪个操作系统版本? - coderslay
我找到了问题所在,我在移动浏览器上测试这个例子时没有成功,但是当我将其作为应用程序进行测试时却可以正常工作。现在我感到困惑,因为我在另一个例子中使用了PhoneGap地理位置功能,在移动浏览器上也可以正常工作。你能给我指点一下吗? :) - Diogo Cardoso
所以你的意思是你在手机的浏览器上打开了上面的HTML页面?如果是的话,那肯定行不通。你需要将其作为应用程序打开...其次,你能解释一下如何在移动浏览器上使用Phonegap地理位置吗? - coderslay
我以为我在使用PhoneGap功能,但实际上我正在使用W3C Geolocation API,感谢您的解释。 - Diogo Cardoso
2
是的,W3C地理定位API已经在大多数现代浏览器中实现了,所以你使用的就是它。实际上,在PhoneGap中我们也使用了这个API,在支持W3C实现的iOS和Android版本上使用它可以节省一些代码。 - Simon MacDonald
2个回答

2

首先,您需要将其作为应用程序进行测试,而不是在Web浏览器上进行测试。 其次,如果您想使用地理位置,则可以像这样使用它。

<script type="text/javascript" charset="utf-8" src="phonegap.js"></script>
<script type="text/javascript" charset="utf-8">

// Wait for PhoneGap to load
//
document.addEventListener("deviceready", onDeviceReady, false);

// PhoneGap is ready
//
function onDeviceReady() {
    navigator.geolocation.getCurrentPosition(onSuccess, onError);
}

// onSuccess Geolocation
//
function onSuccess(position) {
    var element = document.getElementById('geolocation');
    element.innerHTML = 'Latitude: '           + position.coords.latitude              + '<br />' +
                        'Longitude: '          + position.coords.longitude             + '<br />' +
                        'Altitude: '           + position.coords.altitude              + '<br />' +
                        'Accuracy: '           + position.coords.accuracy              + '<br />' +
                        'Altitude Accuracy: '  + position.coords.altitudeAccuracy      + '<br />' +
                        'Heading: '            + position.coords.heading               + '<br />' +
                        'Speed: '              + position.coords.speed                 + '<br />' +
                        'Timestamp: '          + new Date(position.timestamp)          + '<br />';
}

// onError Callback receives a PositionError object
//
function onError(error) {
    alert('code: '    + error.code    + '\n' +
          'message: ' + error.message + '\n');
}

</script>

0

我从未能够在Android(API 8)上按预期启动cordova-1.5.0的deviceready事件... 但是切换到1.6.1后就没有问题了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接