[Diary/2011/August]

InfoWindow+iframeで中身を動的生成 / 2011-08-10 (水)

今日

色々あって4:00起床.プログラミングの続き.
8:30学校着.すぐプログラミングの続き.一つ目の問題解決.まさかこんなんだとは.
午後一で嫌な話を聞く.何でそうなってる.
12:00〜13:00 時差ボケと睡眠不足による仮眠.
13:00〜15:00 研究室ミーティング.
強烈な目眩で横になったが目が覚めたら3時間経ってしまっていて,20:00学校発.

GoogleMaps APIのInfoWindowの中にiframeを作ってやって,その中に書き込む方法.
どうやっても出来ないできないとずっと悩んでいたが……解決法はsetTimeoutで時間を空けてやるというマジで最悪な方法であった.

var iframe = document.createElement('IFRAME');

iframe.setAttribute("frameBorder", "1");
iframe.setAttribute("scrolling", "yes");
iframe.setAttribute("name", "iframe1");

iframe.style.width = "200px";
iframe.style.height = "200px";
iframe.src = "about:blank";

infoWindow.setContent(iframe); //Google Maps APIのinfoWindowのインスタンスにセット
infoWindow.open(map, marker);

var timerID = setTimeout(function(){
      var iframedoc = iframe.contentDocument;
      iframedoc.writeln("");
      iframedoc.body.innerHTML = 'コンテンツの中身';
}, 100);

つまり一度openしてからsetTimeoutしないとcontentDocumentにはアクセス不可ということ.
そういやListenerもそうやってた……なんでこんなクソ仕様なんだ.

だからここに配置したボタンにListenerを登録するときは,更にsetTimeoutでListenerを登録する関数をネストしなきゃいけない……ってことだよな.
なんてこった.