Iphone “建立电话鸿沟”;“设备日”;如果位置服务已关闭,则事件从不激发
我已经用JQM(1.3.1)、jQuery(1.9)、CSS3和javascript编写了一个webapp。现在我正处于第二阶段,我正在使用phone gap(2.7)将这个应用程序移植到苹果商店(目标iOS(6.1)/iPhone5——这个问题可以在iphone4s/iOS 6.0上重现 我的地理位置代码(如下所示)在浏览器中执行时运行良好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'
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;
}
希望这对别人有帮助。谢谢。大家好,有什么要给我的吗?