2012-03-06 3 views
1

iOS에서 작동하지 않는 Flash 용 Google지도 API의 해결 방법으로 Flex 모바일 응용 프로그램에서 Google지도 Javascript API를 사용하여 StageWebView를로드하려고합니다. stageWebView.loadString() 메서드를 사용하고 있습니다. 다음은 HTML.Javascript가로드되는 관련 부분입니다.Google지도 JS API v3이 Flex Mobile 내에서로드되지 않습니다. StageWebView

내 문제는 브라우저 (IE, Chrome 및 Safari) 및 Flash Builder iPhone/iPad 시뮬레이터에서이 문제를 완벽하게 처리한다는 것입니다. 실제 장치에서는 맵이로드되지 않고 일부 try..catch 문을 통해 "TypeError : '정의되지 않은'은 생성자가 아닙니다."라는 오류를 식별 할 수있었습니다.이 오류는 내부에 나열된 각 행에 의해 throw됩니다. 아래의 초기화 함수.

무엇이 잘못 될지에 대한 의견이 있으십니까?

<!DOCTYPE html> 
    <html> 
    <head> 
     <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 
     <style type="text/css"> 
     html { height: 100% } 
     body { height: 100%; margin: 0; padding: 0 } 
     #map_canvas { height: 100% } 
     </style> 
     <script type="text/javascript" 
     src="http://maps.googleapis.com/maps/api/js?v=3&key=MY_KEY&sensor=true"> 
     </script> 
     <script type="text/javascript"> 
     /* a bunch of variables and functions */ 
     function initialize() { 
      var myOptions = { center: new google.maps.LatLng(43.476302, -80.4816062), zoom: 12, mapTypeId: google.maps.MapTypeId.ROADMAP }; 
      map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
      geocoder = new google.maps.Geocoder(); 
      dirDisplay = new google.maps.DirectionsRenderer(); 
      /* some other stuff */ 
     } 
     if(window.addEventListener) window.addEventListener("load", initialize, true); else window.onload = initialize; 
     </script> 
    </head> 
    <body> 
     <div id="map_canvas" style="width:100%; height:100%;" ></div> 
     <div id="dirPanel" style="width:100%;" ></div> 
    </body> 
    </html> 

편집 : 나는에서는 google.maps가 포함 된 개체를 어떻게 확인하고 찾을 수 놀랐습니다 그 객체가 Map, Polyline, Marker, Geocoder으로, 브라우저에 나타나는와는 달리 다른 자식 객체의 호스트, 이 다른 이유에

google.maps { 
    modules:Object, 
    Load:function (apiLoad) { delete google.maps.Load; apiLoad([/*lots of stuff I don't feel like copying out by hand*/], loadScriptTime); }, 
    _gjsload_:function (name, text) { modules[name] = text; } 
} 

어떤 생각을 : 아이폰 OS 장치에 의해 bpresented 버전은 다음과 같습니다? 또는지도 API가 작동하도록하려면 어떻게해야합니까?

+0

Google은 Flash/Flex Maps API를 더 이상 지원하지 않으며 모든 사용자에게 JS Maps API 사용을 권장합니다. –

답변

1

확실히 외부 스크립트가로드되고 있는지 의심 스럽습니다. 내 생각 엔 연결 또는 권한으로 인해 외부 스크립트를 다운로드 할 수 없으므로 오류가 발생합니다. 구글 변수가 extenal 위치 예에서 페이지를 당신이 정확하게 모든 설정이 생각하는 경우가

if (typeof google !== 'undefined') { 
    // Use google 
} else { 
    // Warn the user they may not be connected to the internet? 
} 

, 외부 위치에 스크립트를 넣어하려고 사용하고로드하기 전에 정의 된 경우

에 한번 테스트를 확인합니다 stageWebView.loadString() 대신 stageWebView.loadURL()을 테스트 해보십시오. 로드되지 않으면 응용 프로그램 인터넷 액세스가 거부되었을 수 있습니다. 나는이 iOS에서 작동 정확히 모르겠지만 제안은 당신이뿐만 이것에 대해 묻는 것입니다 그리고 당신은 리소스에 액세스하려고 할 때 -로 표시 :

http://help.adobe.com/en_US/flex/mobileapps/WSa8161994b114d624-33657d5912b7ab2d73b-7fe2.html

이 또는 해결되지 않을 수도 있습니다 귀하의 문제는 아니지만이 대답이 .loadString()을 사용할 때 잡힌 사람들에게 도움이되기를 바랍니다. 실제로 문자열에서로드 된 웹 콘텐츠를보고있을 때 실제로 인터넷에 액세스 할 수 있는지 확인하는 것을 잊어 버리는 것은 쉽습니다.

+0

신속한 응답에 감사드립니다. 나는 initialize()의 시작 부분에 google과 google.maps의 타입을 알려주고 둘 다'object'를 반환하는 경고를 추가했다. Flex 애플리케이션이 인터넷에 액세스 할 수 있다는 것을 알고 있습니다. 애플리케이션의 앞부분에있는 stageWebView.loadURL() 메소드를 통해 StageWebView를로드합니다. 파일을 외부 위치에서로드 할 수 없습니다. Flex 어플리케이션을 통해 런타임 중에 내용을 변경해야하기 때문에'StageWebView.loadString() '을 사용하는 이유가 있습니다. – FlexMobileAmateur

관련 문제