y-matsui::weblog

電子楽器、音楽、コンピュータ、プログラミング、雑感。面倒くさいオヤジの独り言

GoogleMapsで困った

GoogleMapで、様々な不可解な問題にぶち当たった。

■GXmlHttpのresponseXMLを取得できない
FireFox(v3.5.7)でGXmlHttpの第三引数(非同期通信)をfalseにすると、responseXMLを取得できない
trueにすると、FireFoxではバッチリだが、今度はIEがエラーを出すようになる(読み込みタイミングによって、オブジェクトを探せないなどの不具合)
結局、ブラウザ判定でnavigator.AppNameにMicrosoftが含まれる場合は非同期通信をfalse、それ以外ならtrueにすることで解決した。

//GXmlHttpの非同期通信をIEFireFox,Safariで切り替える
var request=GXmlHttp.create();
var flg=false;
if(navigator.appName.indexOf("Microsoft")>-1){
flg=false;
}else{
flg=true;
}
request.open("GET","XMLファイルのURL,flg);

IEで謎のメモリリーク
GoogleMapが含まれるページで、リロードを繰り返したり、使い続けたりした場合に、メモリ使用量がうなぎのぼり(解放されない)問題。
特にIEでひどく、リロードの度に10MB単位で増えたりする。→いつの間にかIEが300MBもメモリを使っていたなんていう笑えない状況に。
FireFoxSafariの場合は、ほとんど使用量が代わらない。
「body onunload="Gunload();"は必須だよ」とか「IEで匿名関数を使うとリークするよ」とか情報があるのだが、どれもIEメモリリークに対しては効果が無いようだ。
循環参照、DOMオブジェクト、イベントハンドラクロージャなどのキーワードでソースコードとにらめっこしているが、なかなか解決には辿りつけない。

http://markmail.org/message/gt54r3qxga4hhxfk#query:google%2Bmap%20IE%20%E3%83%A1%E3%83%A2%E3%83%AA+page:1+mid:zvaeih27kc2746tn+state:results
http://techbank.jp/Community/blogs/nora/archive/2009/09/01/13198.aspx
http://d.hatena.ne.jp/AWAWA/20071207/1197036423
http://d.zeromemory.info/2006/03/06/memory-leak-ajax2.html
http://d.hatena.ne.jp/lesamoureuses/20080416/1208325055
http://d.hatena.ne.jp/AWAWA/20071204/1196775614
http://nanto.asablo.jp/blog/2005/12/04/165848