2012-07-07 4 views
1

Apple Store에서 일부 테스트를했으며 지리적 위치 코드 (위도와 경도를 알고 있음)를 발견했으며 iPhone, iPod Touch 또는 iPad에서 작동하지 않습니다. MacBook/iMac에서 작동하도록 추가 코드를 추가해야했습니다.iPhone/iPod Touch/iPad에서 Geolocation 코드가 작동하지 않습니다.

누구나 iPod Touch/iPhone/iPad 기기에서 작동하는 위도/경도를 알 수있는 코드를 아십니까?

코드 :

// 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 만으로 배포하는 경우에 당신은 간단하게 기본적인 자바 스크립트를 사용할 수 있으며 모두 라이브러리를 우회 :

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

그래, 제대로 작동하므로 불행히도 스크립트의 다른 곳에서 버그가 발생합니다. –

+0

최신 버전의 스크립트를 다운로드하십시오. 내가보고있는 한 가지는 Google에서 은퇴 한 장비를 포함시키는 것입니다. 그 일을하고 아직도 문제가 있다면 어떻게해야하는지 알려주세요. 현재 열려있는 버그를 인식하지 못했습니다. –

+0

Ajax를 사용하여 PHP에 javascript 변수를 전달할 때 문제가 발생했습니다. 모바일 애플 기기에서만 왜 그런 일이 일어 났는지 나는 정말로 확신 할 수 없다. –

관련 문제