2013-06-26 4 views
3

최근에 사용한 PhoneGap/Cordova의 버전을 최근 업데이트했습니다. 로드 할 때마다 다음 오류가 계속 발생하는 앱에 페이지가 있습니다. Javascript Error Android PhoneGap에서 "잡히지 않은 참조 오류 : Google이 정의되지 않았습니다."

Uncaught Reference Error: google is not defined

는 내 휴대 전화에서 해당 페이지를로드하려고 같은 오류가 발생했습니다 여전히 시도하고 내 옵션을 좁힐 구글 개발자 사이트에서 직접 샘플 웹 페이지를 사용하려고합니다. (여기에있다 : https://developers.google.com/maps/documentation/javascript/examples/map-simple). Chrome에서 내 데스크톱의 .HTML 파일로 google에서이 웹 페이지를 실행하면 정상적으로 작동합니다.

내가 여기있는 솔루션을 사용하는 것을 시도했다 : Google Maps API throws "Uncaught ReferenceError: google is not defined" only when using AJAX 초기화 방법은 심지어 난 여전히 누락 내 스크립트 태그에 문제가 믿기 날 리드가 호출되지 않았다 그러나

.

는 지금까지 내가, 내가 적절한 스크립트를 사용하고 말할 수있는 호출 내 HTML에서 :

origins[0] = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); 

전체 코드는 다음과 같이

<script type="text/javascript" src="cordova.js"></script> 
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?<KEY>&sensor=false"></script> 

과 충돌하는 자바 스크립트 코드 여기 :

<!DOCTYPE HTML> 
<html> 
<head> 
<title>MASH Locations</title> 
<meta name="viewport" 
    content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" /> 
<link rel="stylesheet" type="text/css" href="styles/layout.css" /> 
<script type="text/javascript" src="cordova.js"></script> 
<script type="text/javascript" 
    src="http://maps.googleapis.com/maps/api/js?key=(myAppKey)&sensor=false"></script> 
<script type="text/javascript" charset="utf-8" src="Util.js"></script> 
<script type="text/javascript" charset="utf-8" src="QuickSort.js"></script> 
<script type="text/javascript" charset="utf-8" src="Location.js"></script> 
<script type="text/javascript"> 
    var origins, destinations; 
    var BORDER_ROW = '<tr><td colspan="3" class="location-result-border">&nbsp;</td></tr>'; 
    var RESULT_FORMAT = '<tr><td id="result_{7}" class="location-result-row" onclick="onLocationResultClick(\'{0}\', \'{1}\', \'{2}\', \'{3}\', \'{4}\', \'http://cloud.intelligentbits.net/mash/images/{5}\', \'{6}\')">' 
     + '<table class="{8}">' 
     + '<tr><td class="location-result-distance" rowspan="3"><div>{9}</div>miles</td>' 
     + '<td class="location-result-logo" rowspan="3"><img src="http://sqldb.intelligentbits.net/mash/images/{5}" alt="{0}" /></td>' 
     + '<td class="location-result-name">{0}</td></tr>' 
     + '<tr><td class="location-result-address">{10}</td></tr>' 
     + '<tr><td class="location-result-city">{11}</td></tr></table></td></tr>'; 

    function onLoad() 
    { 
     // Wait for PhoneGap to load 
     document.addEventListener("deviceready", onDeviceReady, false); 
    } 

    // PhoneGap is ready 
    function onDeviceReady() 
    { 
     navigator.geolocation.getCurrentPosition(onPositionFound, onPositionError); 
    } 

    function onPositionFound(position) 
    { 
     // get the current location 
     origins = new Array(); 
     origins[0] = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); 

     document.getElementById('finding').innerText = 'Finding our locations...'; 
     readFile('http://sqldb.intelligentbits.net/mash/locations.txt', onLocationsFound); 
    } 

    // onPositionError Callback receives a PositionError object 
    function onPositionError(error) 
    { 
     alert('code: ' + error.code + '\n' + 
       'message: ' + error.message + '\n'); 
    } 

    function onLocationsFound(text) 
    { 
     if (text == null || text.length == 0) 
     { 
      document.getElementById('finding').innerText = 'An error occurred.'; 
      return; 
     } 

     // split the text into lines (one line per location) 
     var lines = text.split(/\r?\n/g); 
     if (lines.length == 0) 
     { 
      document.getElementById('finding').innerText = 'An error occurred.'; 
      return; 
     } 

     // destinations 
     destinations = new Array(); 
     var locIdx = 0; 

     // iterate over lines/locations 
     for (var i = 0; i < lines.length; ++i) 
     { 
      // split into fields 
      var loc = new Location(); 
      var fields = lines[i].split(';'); 

      for (var j = 0; j < fields.length; ++j) 
      { 
       // split fields into name and value 
       var tokens = fields[j].split('='); 
       if (tokens.length != 2) continue; 

       switch (tokens[0].toUpperCase()) 
       { 
        case 'NAME': 
         loc.Name = tokens[1]; 
         break; 
        case 'ADDRESS': 
         loc.StreetAddress = tokens[1]; 
         break; 
        case 'CITY': 
         loc.City = tokens[1]; 
         break; 
        case 'STATE': 
         loc.Region = tokens[1]; 
         break; 
        case 'POSTAL': 
         loc.PostalCode = tokens[1]; 
         break; 
        case 'PHONE': 
         loc.Phone = tokens[1]; 
         break; 
        case 'HOURS': 
         loc.Hours = tokens[1]; 
         break; 
        case 'LOGO': 
         loc.LogoFileName = tokens[1]; 
         break; 
        case 'EMAIL': 
         loc.Email = tokens[1]; 
         break; 
       } 
      } 

      // save the destination 
      destinations[locIdx++] = loc; 
     } 

     if (destinations.length == 0) 
      document.getElementById('finding').innerText = 'An error occurred.'; 
     else 
      calculateDistances(origins, destinations); 
    } 

    function calculateDistances(orig, dest) { 
     // the passed-in destinations are arrays of Location objects; Google Maps wants strings 
     var destStrings = new Array(); 
     for (var i = 0; i < dest.length; ++i) 
      destStrings[i] = dest[i].ToAddressString(); 

     var service = new google.maps.DistanceMatrixService(); 
     service.getDistanceMatrix(
      { 
      origins: orig, 
      destinations: destStrings, 
      travelMode: google.maps.TravelMode.DRIVING, 
      unitSystem: google.maps.UnitSystem.IMPERIAL, 
      avoidHighways: false, 
      avoidTolls: false 
      }, onDistancesFound); 
    } 

    function onDistancesFound(response, status) 
    { 
     if (status != google.maps.DistanceMatrixStatus.OK) 
     { 
      alert('Error was: ' + status); 
     } 
     else 
     { 
      // get the place we'll store the list 
      var p = document.getElementById('finding'); 
      var table = document.getElementById('location-results'); 
      var orig = response.originAddresses; 
      var dest = response.destinationAddresses; 

      p.innerText = 'Tap a location for more options.'; 

      // iterate over origins 
      for (var i = 0; i < orig.length; ++i) { 
       var results = response.rows[i].elements;     
       // iterate over destinations 
       for (var j = 0; j < results.length; ++j) { 
        // split the location into the amount and units 
        var distance = results[j].distance.text.Trim().split(' '); 
        // update the locations 
        destinations[j].DistanceFromUser = parseFloat(distance[0]); 
        destinations[j].DistanceUnits = distance[1]; 
        destinations[j].TimeFromUser = results[j].duration.text; 
       } 
      } 

      // sort the distances 
      QuickSort(destinations, 'DistanceFromUser'); 

      // print the results 
      var tablerows = ''; 
      for (var i = 0; i < destinations.length; ++i) { 
       var loc = destinations[i]; 
       tablerows += RESULT_FORMAT.Format(loc.Name, loc.Phone, loc.ToAddressString(), loc.ToTwoLineAddressString(), 
        loc.Hours, loc.LogoFileName, loc.Email, i, 'location-result-' + ((i + 1) % 2 == 0 ? 'even' : 'odd'), 
        loc.DistanceFromUser, loc.StreetAddress, loc.City); 
      } 


      tablerows += '<tr><td><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/></td></tr>'; 

      // append the rows 
      table.innerHTML += tablerows; 
     } 
    } 

    function onLocationResultClick(name, phone, address, displayAddress, hours, imageUrl, email) 
    { 
     // save the name and address to local storage for the directions 
     window.localStorage.setItem('location-position', address); 
     window.localStorage.setItem('location-address', displayAddress); 
     window.localStorage.setItem('location-title', name); 
     window.localStorage.setItem('location-hours', hours); 
     window.localStorage.setItem('location-phone', phone); 
     window.localStorage.setItem('location-imageUrl', imageUrl); 
     window.localStorage.setItem('location-contact', email); 

     // call link 
     window.location = 'location.html'; 
    } 
</script> 
</head> 
<body onload="onLoad()"> 
    <h1> 
     <a href="index.html" class="back"> 
      <div> 
       <span></span> 
      </div> <span class="text">Back</span> 
     </a> Nearest Locations 
    </h1> 
    <div id="location-results-wrapper"> 
     <h1 style="position: static; width: 94%;"> 
      <a href="#" class="back"> 
       <div> 
        <span></span> 
       </div> <span class="text">Back</span> 
      </a> # 
     </h1> 
     <table id="location-results"> 
      <tr> 
       <td id="finding" style="vertical-align: top;">Finding your 
        location...</td> 
      <tr> 
     </table> 
    </div> 
</body> 
</html> 

및 정확한 오류 로그 :

+0

제공하신 [링크] (https://developers.google.com/maps/documentation/javascript/examples/map-simple)의 HTML 소스를 확인한 경우 나는 그것이''이 스크립트 태그를 발견했습니다. 하지만 '

0

다음

  • 는 인터넷 연결
  • 코드에서 첫 번째 스크립트 태그로지도 API 스크립트 태그를 계속 확인하십시오. 즉, 다른 javascript 로드맵 API를로드하기 전입니다.

희망이 도움이됩니다.

+0

슬프게도 그걸로 운이 없다는 생각에 너무 늦게 Google을 실행하고 있지만, 내가이 스크립트를 추가하려고했지만 구글을 기다릴 수 있지만 여전히 운이 없었 :'function LoadGoogle() {if (typeof google ! = 'undefined'&& google && google.load) {// 여기에서 google.load()를 사용하십시오} else {// 재 시도 setTimeout (LoadGoogle, 30); }} LoadGoogle();'또한 이상한 점은 이전 버전의 PhoneGap을 사용할 때 원래 원래 게시물의 정확한 코드가 (2.5)에 작성된 것입니다. –

0

여러 HTML 페이지를 사용할 때. 기본 페이지 (색인)에 Google API 자바 스크립트를 사용하십시오. Ajax는 리프레시 될 때지도를 다시 렌더링하지 않습니다.

0

Google지도 API가 정의되지 않은 경우 문제가 발생할 수도 있습니다. 위도와 경도에서 주소를 가져 오는 동안 나는 놓 쳤기 때문에.

관련 문제