JavaScript FAQ(八)——ウィンドウ(Window)


六、窓口
 
1.窓口を開く(Opening a window)
Q:ブラウザの新しいウィンドウはどうやって開けますか?
A:window.open()の方法を使って、新しいブラウザの窓を開けてもいいです.例えば、次のコードは新しいウィンドウに現在のページを表示します.
 
myRef = window.open(''+self.location,'mywin', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'); 
window.open()方法の一般文法は以下の通りです.
winRef = window.open( URL, name [ , features [, replace ] ] )
変数wirefに格納されている戻り値は、新しいウィンドウに対する参照です.この参照は後で使用できます.例えば、このウィンドウを閉じます.
ウィンドウズ.close()を窓にフォーカスします.
wiref.focus()または他のウィンドウ操作を実行します.
パラメータURL、name、feature、replaceの意味はそれぞれ以下の通りです.
URL  Sringは、新しいウィンドウで開くページのアドレスを指定します.アドレスを指定したくない場合は、空の文字列を送ることができます.例えば、新しいウィンドウにスクリプトによって生成された内容を書きたい場合は).
name   Stringは、新しいウィンドウの名前を指定します.この名前の使い方は枠の中の枠の名前と同じです.例えば、フォームのハイパーリンクに同じ名前のウィンドウが既に存在すれば、既に存在しているウィンドウに新しい内容を表示し、新しいウィンドウを作成しなくなります.
フィーチャー   Stringは、新しいウィンドウの特性を指定するためのオプションパラメータです.feature文字列は、カンマで区切られた一つ以上のfeature=nameペアを含むことができる.
replace    bollan、オプションパラメータ.trueであれば、ブラウザナビゲーション履歴の現在のページに置き換えられます.注意:このパラメータを無視するブラウザがあります.
 
以下の特性は多数のブラウザで使用できます.
toolbar=0|1   新しいウィンドウにツールバーを表示するかどうかを指定します.
location=0|1  新しいウィンドウにアドレスバーを表示するかどうかを指定します.
directores=0|1は、新しいウィンドウにNetscapeのフォルダボタンが表示されるかどうかを指定します.
status=0|1   新しいウィンドウにステータスバーを表示するかどうかを指定します.
menubar=0|1   新しいウィンドウにブラウザメニューバーを表示するかどうかを指定します.
scrollbar=0|1   新しいウィンドウにスクロールバーがあるべきかどうかを指定します.
resizable=0|1  新しいウィンドウのサイズをリセットできるかどうかを指定します.
width=pixels   新しいウィンドウの幅を指定します.
height=pixels  新しいウィンドウの高さを指定します.
top=pixels   新しいウィンドウの左上のY座標を指定します(バージョン3ブラウザではサポートされていません).
left=pixels   新しいウィンドウの左上のX座標を指定します(バージョン3ブラウザではサポートされていません).
 
2.窓を閉じる(Close a window)
Q:どのようにウィンドウを閉じますか?
A:前のスクリプトで開いているウィンドウを閉じます.window.close()の方法を使ってもいいです.
winRef.close();
上のwindlefはwindow.open()メソッドによって戻ります.ここのgotchは、あなたのシナリオがwirefアプリケーションのウィンドウを閉じようとしたときに、必ず存在します.(ユーザが閉じているかもしれません!)ウィンドウが存在しないとスクリプトがエラーになります.可能な解決方法は以下の通りです.
  • 同じwirefとnameのウィンドウを再び開く
  • 閉じたウィンドウコードは、ウィンドウが閉じられるところにのみ配置されます.この場合、ウィンドウの引用は自分です.つまりself.close().
  • は、シャットダウンを試みる前に、テストウィンドウが依然として開いているかどうかを確認する.
  • あなたのスクリプトがユーザーによって開けられたメインウィンドウを閉じることを試みると、多くのブラウザが一つのウィンドウを弾いて、スクリプトがブラウザウィンドウを閉じることを許可するかどうかをユーザに問い合わせる.自分でテストしてください.これはブラウザのウィンドウを閉じるためのスクリプトです.
     
    3.ウインドウサイズをリセットする(Resizing a window)
    Q:どのようにウィンドウのサイズをリセットしますか?
    A:Netscate Navigator 4またはInternet Explorerで 4では、window.resize To(newWidth,newHeight)またはwindow.resizeBy(DX,DY)を使ってウィンドウサイズをリセットできます.
    これらの方法は古いバージョンのブラウザではサポートされていません.一番いい解決方法は「古いバージョンのブラウザでは何もしない」かもしれません.例えば、次のコードは新しいバージョンでブラウズします.ウィンドウを600 x 400にリセットします.古いバージョンでもエラーが発生しません.
    if (parseInt(navigator.appVersion)>3)
      top.resizeTo(600,400);
    resizett()のパラメータは、異なるブラウザ上で異なる意味があります.Internet Explorerでは、外部ウィンドウのサイズを指定しますが、Netscate Navigatorでは、内部ウィンドウのサイズを指定します.すべてのブラウザで同じ外部ウィンドウサイズにリセットするには、この関数が使えます.
    function resizeOuterTo(w,h) {
     if (parseInt(navigator.appVersion)>3) {
       if (navigator.appName=="Netscape") {
        top.outerWidth=w;
        top.outerHeight=h;
       }
       else top.resizeTo(w,h);
     }
    }
    
     
    4.最大化ウィンドウ(Maximizing a window)
    Q:窓口はどうやって最大化しますか?
    A:ウィンドウを最大化するには、まず、利用可能なスクリーンサイズを決定する必要があります.ウィンドウをユーザのスクリーンサイズにリセットします.なお、信頼できる方法はなく、バージョン3の主流ブラウザでスクリーンサイズを検出する(Navigator 3.xからJavaを呼び出す以外).したがって、以下の例示的な関数のmaximize Windowは、4または更新されたバージョンでのみ動作することができます.試してみます
    ソースは:
    function maximizeWindow() {
     if (parseInt(navigator.appVersion)>3) {
      if (navigator.appName=="Netscape") {
       if (top.screenX>0 || top.screenY>0) top.moveTo(0,0);
       if (top.outerWidth < screen.availWidth)
          top.outerWidth=screen.availWidth;
       if (top.outerHeight < screen.availHeight) 
          top.outerHeight=screen.availHeight;
      }
      else {
       top.moveTo(-4,-4);
       top.resizeTo(screen.availWidth+8,screen.availHeight+8);
      }
     }
    }
    2つの備考:
    1.Windowsでは、ウィンドウの最大化は
  • 移動窓の左上から点x=-4,y=-4,
  • は、ウィンドウサイズをスクリーンサイズにリセットし、8画素(水平と垂直の2次元)を加算する
  • .
    これはウィンドウの枠を隠します.残念なことに、Netscape Navigator 4は署名されたスクリプトがウィンドウの左上の隅をスクリーンから取り除くことができるように要求しています.したがって、上記(署名されていません)スクリプトの結果はウィンドウの枠がはっきりと見えます.(ウィンドウを変更すると、Netscapeの関連する分岐スクリプトは、ウィンドウが最大化されているかどうかを検出します.そうであれば、そのまま保持します.)
    2.JavaScriptコードは最大化ボタン(右上隅の第二ボタン)のスタイルを変えられないので注意してください.
     
    5.書き込みウィンドウ(Writing to a window)
    Q:スクリプトで作成した内容を他のウィンドウにどう書きますか?
    A:winRef.document.write()またはwinRef.document.writeln()方法を用いて、スクリプトが生成したコンテンツを別のウィンドウに書き込むことができる.例えば、以下の関数はCosolieというタイトルの新しいウィンドウを開き、指定された内容を書き込みます.
    writeConsole('Hello from JavaScript!');
    function writeConsole(content) {
     top.consoleRef=window.open('','myconsole',
      'width=350,height=250'
       +',menubar=0'
       +',toolbar=1'
       +',status=0'
       +',scrollbars=1'
       +',resizable=1')
     top.consoleRef.document.writeln(
      '<html><head><title>Console</title></head>'
       +'<body bgcolor=white onLoad="self.focus()">'
       +content
       +'</body></html>'
     )
     top.consoleRef.document.close()
    }
    上記の例では、consoneに何回かのコンテンツを書き込んだ後、consolieウィンドウが出力の履歴を行ったり来たりすることができます.これはいつも必要な機能ではありません.履歴を作成せずに出力内容を作成したい場合は、次の操作をウィンドウを開けてから(最初の書き込みの前に)保存します.
    docRef = top.winRef.document.open("text/html","replace");
    ここでのwindRefは、window.open()メソッドによって返されるウィンドウ参照であり、DocRefはグローバル変数であり、シナリオとして新しいドキュメントに対する参照である.
     
    6.私の窓口はまだありますか?(Is my window still open?)
    Q:窓口はまだありますか?
    A:window.open()方法を使って新しいブラウザのウィンドウを開けたと仮定します.
    winRef = window.open( URL, name, features )
    に続き、使えます.window.closed属性テストこのウィンドウはまだ開いていますか?
    if (winRef.closed) alert ("It's closed!")
    else alert ("It's still open!")
    window.closed属性はNetscape Navigator 2またはInternet Explore 3ではサポートされていません.エラーメッセージが発生しないように、上のコードを条件文に入れてください.
    if (parseInt(navigator.appVersion>2)) {
    if (winRef.closed) alert ("It's closed!")
    else alert ("It's still open!")
    }
    (Internet Explore 3はそのバージョンが2であることを報告していますので、これは含まれています.navigator.appVersionの条件はNavigator 3またはそれ以上の高さおよびInternet Explorer 4またはそれ以上のものである.true.)
    古いバージョンのブラウザには簡単な解決方法がありません.onUnloadイベントプロセッサを使用して、window.closedのプロパティをシミュレートしたいかもしれません.しかしながら、unloadイベントは、ウィンドウを閉じるのと同じではないことに留意されたい.例えば、ユーザが元のページから離れて別のページに行くと、イベント(ウィンドウが開いているまま)がトリガされることは言うまでもない.
     
    7.ウィンドウタイトル(Window title)
    Q:他のウィンドウのタイトル、つまり、ウィンドウの一番上のタイトルバーの内容はどのように変更しますか?
    A:ウィンドウのタイトルを変更するために、あなたのスクリプトをウィンドウに書き込む文字列は以下の内容で開始できます.'<html><head><title>Your new title here</title></head>'は、他のウィンドウの内容を書き換えると、ウィンドウに以前に表示されたすべての内容が消去されることに注意してください.したがって、ウィンドウの内容がまだ存在したいなら、ウィンドウのタイトルを変更した後、ウィンドウの内容を書き換える必要があります.(脚本が古い内容を知らないなら、最後にウィンドウのタイトルを変えないでください.)
    スクリプト生成の内容をウィンドウに書き込む詳細については、書き込みウィンドウを参照してください.