2012-07-07 107 views
1

我们在Apple Store进行了一些测试,发现我们的地理位置代码(获取经度和纬度)不适用于iPhone,iPod Touch或iPad。我确实需要添加额外的代码才能使其适用于MacBook/iMac。地理位置代码不适用于iPhone/iPod Touch/iPad

任何人都知道获取经纬度在iPod Touch/iPhone/iPad设备上有效的代码吗?

CODE:

// needed for iPhone/iPad/iTouch 
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key=AIzaSyDrORw0RI-1v-5BixC4T_zLEhcBBwGzyuQ&amp;sensor=true"></script> 

// needed for iMac/MacBook 
<script src="http://code.google.com/apis/gears/gears_init.js" type="text/javascript"></script> 
<script src="http://gaychat.me/js/geo.js" type="text/javascript" ></script> 

<script type="text/javascript"><!-- 
     var ua = navigator.userAgent.toLowerCase(); 
     var isAndroid = ua.indexOf("android") > -1; 
     var isIPhone = ua.indexOf("iphone") > -1; 
     var isIPod = ua.indexOf("ipod") > -1; 
     var isBlackberry = ua.indexOf("blackberry") > -1; 
     var isIPad = ua.indexOf("ipad") > -1; 

     if (isIPhone || isIPod || isIPad) { 
       function doGeo() { 
         var geolocator = new google.maps.Geocoder(); 

         geolocator.geocode({}, 
           function(results, status){ 
             var geocoding_url = "geocoding.php?lat=" + results[0].geometry.location.lat() + "&long=" + results[0].geometry.location.lng() + "&email=<?=$brosforbros_email;?>&key=<?=$session_key;?>"; 

             $.ajax({ 
               url: geocoding_url, 
               success: function(data) {} 
             }); 
           } 
         ) 

         /*function geo_success(position) { 
           prev_lat = position.coords.latitude; 
           prev_long = position.coords.longitude; 

           var geocoding_url = "geocoding.php?lat=" + position.coords.latitude + "&long=" + position.coords.longitude + "&email=<?=$brosforbros_email;?>&key=<?=$session_key;?>"; 

           $.ajax({ 
             url: geocoding_url, 
             success: function(data) {} 
           }); 
         } 

         function geo_error() { 

         } 

         if (!!navigator.geolocation) { 
           wpid = navigator.geolocation.watchPosition(geo_success, geo_error, {enableHighAccuracy:true, maximumAge:30000, timeout:27000}); 
         }*/ 
       } 
     } else if (geo_position_js.init()) { // needed for MacBook's/iMac with Safari 
       function doGeo() { 
         geo_position_js.getCurrentPosition(success_callback,error_callback,{enableHighAccuracy:true}); 

         function success_callback(p) { 
           geo_lat = p.coords.latitude.toFixed(3); 
           geo_long = p.coords.longitude.toFixed(3); 

           var url = 'geolocation.php?geo_user_id=<?=$user_id;?>&geo_email=<?=$user_email;?>&geo_lat=' + geo_lat + '&geo_long=' + geo_long; 

           $.ajax({ 
             url: url, 
             context: document.body, 
             success: function(data) { 
             // UPDATE GEOLOCATION 
             } 
           }); 
         } 

         function error_callback(p) { 
           alert('error='+p.code); 
         } 
       } 
     } else { 
       var gl; 

       function getCookie(name) { 
         var start = document.cookie.indexOf(name + "="); 
         var len = start + name.length + 1; 

         if ((!start) && (name != document.cookie.substring(0, name.length))) { 
           return null; 
         } 

         if (start == -1) return null; 

         var end = document.cookie.indexOf(";", len); 

         if (end == -1) end = document.cookie.length; 

         return unescape(document.cookie.substring(len, end)); 
       } 

       function displayPosition(position) { 
         geo_lat = position.coords.latitude; 
         geo_long = position.coords.longitude; 

         var url = 'geolocation.php?geo_user_id=<?=$user_id;?>&geo_email=<?=$user_email;?>&geo_lat=' + geo_lat + '&geo_long=' + geo_long; 

         $.ajax({ 
           url: url, 
           context: document.body, 
           success: function(data) { 
             // UPDATE GEOLOCATION 
           } 
         }); 
       } 

       function displayError(positionError) { 
         //alert("error"); 
       } 

       function doGeo() { 
         try { 
           if (typeof navigator.geolocation === 'undefined'){ 
           gl = google.gears.factory.create('beta.geolocation'); 
           } else { 
           gl = navigator.geolocation; 
           } 
         } catch(e) {} 

         if (gl) { 
           gl.getCurrentPosition(displayPosition, displayError); 
         } else { 
           //alert("Geolocation services are not supported by your web browser."); 
         } 
       } 
     } 

     doGeo(); 
    </script> 

回答

1

我写的库。如果你真的只对iOS的部署,那么你可以简单地使用基本JavaScript和完全绕过库:

navigator.geolocation.getCurrentPosition(foundLocation, noLocation); 

function foundLocation(position) 
{ 
var lat = position.coords.latitude; 
var long = position.coords.longitude; 
alert('Found location: ' + lat + ', ' + long); 
} 
function noLocation() 
{ 
alert('Could not find location'); 
} 

的LIB帮助与其他平台的一些时髦的行为。

+0

是的,这是工作正常,所以不幸的是它是一个在脚本中的其他地方的错误。 – 2012-07-07 05:46:56

+0

请获取脚本的最新版本。我看到的一件事是,你包括谷歌退休的齿轮。做到这一点,让我知道如果你仍然有问题。目前不知道有任何开放的错误。 – 2012-07-07 11:25:07

+0

这是一个用Ajax将PHP变量传递给PHP的问题。我真的不确定为什么只发生在移动Apple设备上。 – 2012-07-08 01:33:03

相关问题