2014-11-06 38 views
1

我有以下ondeviceready代码:的PhoneGap ondeviceready和geoPosition.getCurrentPosition不会一起工作

document.addEventListener("deviceready", onDeviceReady, false); 
      function onDeviceReady() { 
       getLocation(); 
      } 

如果我只是调用的getLocation();没有事件监听器,它可以正常工作(除了双位置服务提示符)。

但是,如果我调用getLocation();在上面的代码中失败了。特别是这个函数永远不会返回任何东西和时间:geoPosition.getCurrentPosition(geoSuccess,geoError,{timeout:7000});

代码在'ondeviceready'之外工作的原因是什么,但是当我在上面的代码中调用它时失败了?

想法?

这里是我的getLocation功能:

enter code here

function getLocation(){ 

     var latitude = localStorage.getItem('Lat'); 
     var longitude = localStorage.getItem('Long'); 

     if (geoPosition.init()) { 
      geoPosition.getCurrentPosition(geoSuccess, geoError, {timeout:7000}); 
     } 

     function geoSuccess(p) { 
      console.log("Found you at latitude " + p.coords.latitude + ", longitude " + p.coords.longitude); 
     } 

     function geoError() { 
      console.log("Could not find you!"); 
     } 
    } 

编辑 - ADDED

你可以看到我在代码:http://www.classhoppers.com/app/index.html

如果您在Chrome中运行它上面的页面作品。您可以打开网络检查器并查看本地存储更新Lat/Long

如果您模拟iPhone5,则会看到Lat/Long永远不会更新。

以下是我发现:

调用我的功能:的getLocation();单独工作

调用它的OnDeviceReady里面不起作用

首先,我检查,如果它是一个移动浏览器然后运行onDeviceReady。

if(SmartPhone.isAny() == true){ 
document.addEventListener("deviceready", onDeviceReady, false); 
function onDeviceReady() { 
getLocation(); 
} 
} 
else { 
console.log('browser'); 
getLocation(); 
} 

这里是一个链接到我的getLocation()函数:http://www.classhoppers.com/app/js/geoLocation.js

+0

您是否尝试过不嵌套您的功能? (比如,在'getLocation'之外移动'geoSuccess'和'geoError')看起来它可能是一个范围问题 – 2014-11-06 21:43:26

+0

谢谢,我移动了这些函数但没有任何效果。 – 2014-11-06 21:51:23

+0

当这个函数被调用时,我应该得到一个允许位置服务的提示:geoPosition.getCurrentPosition(geoSuccess,geoError,{timeout:7000}); – 2014-11-06 21:51:57

回答

0

尝试手动插入脚本标签在您的index.html文件的头部cordova.js。我怀疑你错过了这个脚本。

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

我有该脚本加载之前:任何其他人:view-source:http://www.classhoppers.com/app/index.html – 2014-11-06 22:19:27

+0

好吧,我认为这可能是最可能的问题。科尔多瓦没有被加载,因此事件没有被解雇。您是否在cordova应用程序上运行Chrome调试工具以查看是否存在任何控制台错误? – 2014-11-06 22:50:34

+0

我编辑了这篇文章。是的,我已经运行了Chrome开发工具。以下是我发现的内容:如果您在Chrome的这个页面上运行代码,它就可以运行。 http://www.classhoppers.com/app/index。html您可以打开网络检查器并查看本地存储更新Lat/Long 如果您模拟iPhone5,则会看到Lat/Long永远不会更新。 – 2014-11-06 23:08:55