2012-03-06 7 views
1

iOSで動作しないGoogle Maps API for Flashの回避策として、Flex Mobileアプリケーション内にGoogle Maps Javascript APIを搭載したStageWebViewをロードしようとしています。私はstageWebView.loadString()メソッドを使用しています。以下はHTML.Javascriptの関連部分です。Google Maps JS API v3がFlex Mobile内で読み込まれないStageWebView

私の問題は、これをブラウザ(IE、Chrome、Safari)とFlash Builder iPhone/iPadシミュレータで見るとすべてが完全に機能することです。実際のデバイスでは、マップはロードされませんし、いくつかのtry..catchステートメントでは、 "TypeError: '未定義'はコンストラクタではありません"というエラーが発生していることがわかりました。以下の初期化関数

何が間違っている可能性がありますか?

<!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で、ブラウザに表示されたオブジェクトとは異なり、それを見つけて驚いた、PolylineMarkerGeocoder、そして他の子オブジェクトのホスト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; } 
} 

なぜ異なるのですか? Maps APIを動作させるにはどうすればいいですか?

+0

GoogleはFlash/Flex Maps APIをサポートしておらず、誰もがJS Maps APIを使用するように指示してくれたことは良い質問です。 –

答えて

0

this postのアレクサンダーファーバーの提案で、私はMapQuest's Flex/Flash Mobile APIを使用することに決めました。これは非常に効果的であることが証明されています。

+0

残念ながら、MapQuestは2017年6月にFlex/Flashのために引退します。 – Yozef

1

外部スクリプトがロードされているかどうかは間違いありません。私の推測では、接続性やアクセス許可のために、外部スクリプトをダウンロードできないためにエラーが発生することがあります。

はあなたがすべて正しくセットアップを持っていると考えられる場合は、外部の場所にスクリプトを置くと、そのextenal場所すなわちからページをロードしようとし、それを

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

を使用する前に、Googleの変数が定義されているかどうかを確認するためにテストしてみstageWebView.loadString()の代わりにstageWebView.loadURL()を試してみてください。それがロードされない場合は、アプリケーションのインターネットアクセスを拒否した可能性があります。私は、これはiOSの上で動作正確かどうかはわかりませんが、提案はあなたにこのことについて尋ねていることであり、あなたがリソースにアクセスしようとすると - で示される:

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

これは、または解決しない場合がありますあなたの問題はありますが、この答えは.loadString()を使用するときに捕まった人に役立つことを願っています。実際に文字列から読み込まれたWebコンテンツをすでに見ているときに、実際にインターネットにアクセスできるかどうかを確認するのは簡単です。

+0

迅速な対応をありがとう!私は 'initialize()'の初めにgoogleとgoogle.mapsの型を教えてくれて、両方とも 'object'を返すよう警告を加えました。私はFlexアプリケーションがインターネットにアクセスできることを知っています。アプリケーションの前のstageWebView.loadURL()メソッドでStageWebViewをロードします。 ファイルを外部からロードできません。実行時にFlexアプリケーションを介して内容を変更する必要があるため、 'StageWebView.loadString()'を使用した理由がありました。 – FlexMobileAmateur

関連する問題