2回じゃ足りない


Javascriptに関する質問に回答しました。
http://www.hatena.ne.jp/1124186363


1回目の回答に対するコメントに応答する形で、2回目の回答をしたのですが、質問者の方が満足できる回答ではなかった様なので、更に補足説明がしたいです。でも、3回目の回答は出来ません。
質問が終了する前に、トラッックバックしたら、質問者に伝わるでしょうか?とりあえずやってみます。

質問概要

1)任意のサイズの画像を別ウィンドウで表示し、ウインドウサイズを画像に合わせたい。
2)画像のサイズが確実に反映できる様に、画像の読み込み完了を待って、ウィンドウサイズを変更する。



Javascript Source

var objWin;
var timerID;

function fitimg() {
  myImage = objWin.document.getElementById('myImage');

  if (myImage.complete==undefined || myImage.complete) {  
    clearInterval(timerID); 
 
    w=myImage.width;
    h=myImage.height; 
 
    ua=navigator.userAgent;
   
    if(ua.indexOf("Firefox",0)>=0) {
      objWin.innerWidth=w;
      objWin.innerHeight=h;
    } else if(ua.indexOf("MSIE",0)>=0) {
      objWin.resizeTo(w,h);
      objWin.resizeBy(w-objWin.document.body.clientWidth,
              h-objWin.document.body.clientHeight-16);
    } 

    objWin.document.close();
  }
}

function popup(url){
  objWin=window.open("","myWindow","width=640,height=480");

  objWin.document.open();
  objWin.document.write("<html><head><title>サイト名</title></head>");
  objWin.document.write("<body style='margin:0; padding:0;'>");
  objWin.document.write("<img src='"+url+"' id='myImage'>");
  objWin.document.write("</body></html>");

  timerID=setInterval('fitimg()', 100);
}


解説

function popup(url)

ウィンドウをオープンして、指定されたurlの画像を表示。
Imageオブジェクトを識別するため、imgタグに、id属性を指定。
ウィンドウサイズを変更する処理fitimg()を、100/1000秒間隔で起動。

function fitimg()

id='myImage'で識別できるImageオブジェクトを取得。
対象のImageオブジェクトが読み込み完了(complete)であれば、以下の処理。
・インターバルをクリア
・ブラウザを区別して、ウィンドウのリサイズ処理(とりあえずFirefoxIESafariは不可)
・ドキュメントをクローズ

Windowサイズについて

resizeTo()は、Windowの外側のサイズを指定するので、画像サイズに合わせるには内側のサイズを指定する必要がある。
FirefoxではinnerWidth/innerHeightを使用。
IEでは、一度resizeToし、document.body.clientWidth/clientHeightで内側のサイズを参照して、外と内の差をresizeBy()で設定し直す。