Iphone “建立电话鸿沟”;“设备日”;如果位置服务已关闭,则事件从不激发

Iphone “建立电话鸿沟”;“设备日”;如果位置服务已关闭,则事件从不激发,iphone,jquery-mobile,phonegap-build,Iphone,Jquery Mobile,Phonegap Build,我已经用JQM(1.3.1)、jQuery(1.9)、CSS3和javascript编写了一个webapp。现在我正处于第二阶段,我正在使用phone gap(2.7)将这个应用程序移植到苹果商店(目标iOS(6.1)/iPhone5——这个问题可以在iphone4s/iOS 6.0上重现 我的地理位置代码(如下所示)在浏览器中执行时运行良好 var geoOptions = { 'enableHighAccuracy': true, 'timeout': 10000, 'maximumAge'

我已经用JQM(1.3.1)、jQuery(1.9)、CSS3和javascript编写了一个webapp。现在我正处于第二阶段,我正在使用phone gap(2.7)将这个应用程序移植到苹果商店(目标iOS(6.1)/iPhone5——这个问题可以在iphone4s/iOS 6.0上重现

我的地理位置代码(如下所示)在浏览器中执行时运行良好

var geoOptions = { 'enableHighAccuracy': true, 'timeout': 10000, 'maximumAge': 0 };
navigator.geolocation.getCurrentPosition(geoSuccess, geoError, geoOptions);

function geoSuccess(postion)
{
  //on success code here    
}
function geoError(error)
{
  //on error code here    
}
然而,一旦通过phonegap,我的应用程序请求用户允许访问位置服务两次,即两次显示弹出窗口。因此,为了解决此问题,我使用了下面的代码,正如stackoverflow上许多解决方案中建议的那样

function onDeviceReady() {
 navigator.geolocation.getCurrentPosition(geoSuccess, geoError,geoOptions);
}

$(function() {
 document.addEventListener("deviceready", onDeviceReady, false);
});
这解决了弹出的问题,但又开始了一个新的问题

问题:如果位置服务被禁用,我的代码将添加DeviceRady侦听器并等待DeviceRady事件触发,但事件从未触发,它只是停留在那里。如果位置服务被打开,它将按预期工作

以前有人遇到过这个问题吗?你能告诉我你做了什么来解决它吗?请告诉我,我已经花了一天的时间来调试和研究它

亲切的问候和感谢。

问题已解决!:)

事实证明,我没有完全按照phonegap构建文章中的描述包含phonegap库

检查这篇文章

您不需要在每个页面上都包含这个库,只需要在索引页面上,我不确定这会有什么不同,但是在我删除了除index.html之外的任何其他页面上对phonegap.js的任何引用之后,“deviceready”事件开始触发

我注意到的第二件事是,由于某种原因,我的错误处理在phonegap构建之后停止工作,如下所示

switch(error.code) 
{
  case error.PERMISSION_DENIED:
   search.openPanelForSearch("Either the app was denied permission or the location srvice is currently turned off.", showInitialMap);
   break;
  case error.POSITION_UNAVAILABLE:
   search.openPanelForSearch("Geolocation information was unavailable. Would you like to try out a manual serach instead?", showInitialMap);
   break;
  case error.TIMEOUT:
   search.openPanelForSearch("Service was timed out since it took too long to retrieve the gelolcations. Would you like to try out a manual search instead?", showInitialMap);
   break;
  case error.UNKNOWN_ERROR:
   search.openPanelForSearch("Sorry an unknown error occurred. Would you like to try out a manual serach instead?", showInitialMap);
   break;
}
我不得不把它改到下面

switch(error.code) 
{
  case 1:
   search.openPanelForSearch("Either the app was denied permission or the location service is currently turned off.", showInitialMap);
   break;
  case 2:
   search.openPanelForSearch("Geolocation information was unavailable. Would you like to try out a manual search instead?", showInitialMap);
   break;
  case 3:
   search.openPanelForSearch("Service was timed out since it took too long to retrieve the gelolcations. Would you like to try out a manual serach instead?", showInitialMap);
   break;
  default:
   search.openPanelForSearch("Sorry an unknown error occurred. Would you like to try out a manual search instead?", showInitialMap);
   break;
}

希望这对别人有帮助。谢谢。

大家好,有什么要给我的吗?