API Карт Google JS v3 не будет загружаться внутри Flex Mobile StageWebView - PullRequest
1 голос
/ 07 марта 2012

Я пытаюсь загрузить StageWebView с API Google Maps Javascript внутри приложения Flex Mobile в качестве обходного пути для API Карт Google для Flash, не работающего на iOS.Я использую метод stageWebView.loadString ().Ниже приведена соответствующая часть загружаемого HTML.Javascript.

Моя проблема в том, что все отлично работает, когда я вижу это в браузере (IE, Chrome и Safari) и в симуляторах Flash Builder iPhone / iPad.На реальном устройстве карта никогда не загружается, и с помощью некоторых операторов try..catch я смог определить, что я получаю ошибки «TypeError:« undefined »is not constructor», которые вызываются каждой из строк, перечисленных внутриниже приведена функция инициализации.

Есть мысли о том, что может пойти не так?

  <!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 и множеством других дочерних объектов, версия b, представленная устройством iOS, выглядит следующим образом:

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; }
}

Есть мысли о том, почему он отличается?Или что я могу сделать, чтобы заставить работать API Карт?

Ответы [ 2 ]

1 голос
/ 07 марта 2012

Определенно подозревается, загружается ли внешний скрипт или нет.Я предполагаю, что из-за подключения или, возможно, прав доступа вы не можете загрузить внешний скрипт, вызывающий ошибку.

Попробуйте проверить, не определена ли переменная google, прежде чем использовать ее

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

Если вы считаете, что все настроено правильно, попробуйте поместить свой скрипт во внешнее местоположение и загрузить страницу из этого внешнего местоположения, т.е. вместо использования stageWebView.loadString() try stageWebView.loadURL() только для тестирования.Если он не загружается, возможно, вы отказали вашему приложению в доступе к Интернету.Я не уверен, как именно это работает на iOS, но я предлагаю вам спросить об этом, как и когда вы пытаетесь получить доступ к ресурсу - обозначается:

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

Thisможет или не может решить вашу проблему, но я надеюсь, что этот ответ будет полезен для людей, которые были пойманы при использовании .loadString ().Легко забыть проверить, есть ли у вас доступ к Интернету, когда вы уже видите веб-контент, который фактически был загружен из строки.

0 голосов
/ 20 марта 2012

По предложению Александра Фарбера о этой записи я решил использовать Flex / Flash Mobile API MapQuest , который оказался очень эффективным.

...