windowのクローズについて

このQ&Aのポイント
  • javascriptを利用して、ボタンを押すと新しいウィンドウを作成し、別のボタンを押すとウィンドウを閉じる処理を実装していますが、エラーが発生しています。
  • ウィンドウを閉じる処理で「ランタイムエラー w1が宣言されていません」というエラーが表示されます。
  • エラーが発生しないようにするには、ウィンドウが開かれているかどうかをチェックしてから閉じる処理を行う必要があります。
回答を見る
  • ベストアンサー

windowのクローズについて

javascriptを以下のように利用する方法として より良い方法を教えてください。 現在、1つのフォームに2つのボタン(b1,b2)を利用して ・b1 を押すと新しいウィンドウ(w1)を作成(立ち上げる) ・b2 を押すとウィンドウ(w1)をクローズする というものを作成しています。 b1実行時の処理として w1 = window.open("about:blank","w1"); document.forms[0].target="w1"; retun true; b2実行時の処理として document.forms[0].target="_top"; if(!w1.closed)w1.close(); return true; このようにした場合、 一度、b1を実行してウィンドウ(w1)を立ち上げてから b2を実行すれば何も問題なくウィンドウ(w1)は閉じます。 しかし、b1を実行していない場合や、 ユーザが自分でウィンドウ(w1)を閉じた場合、b2実行時に IEで「ランタイムエラー w1が宣言されていません」 とエラーが出ます。 (エラーが出るだけで処理自体は問題ないようです) どのように記述すればエラーになりませんか?

noname#1802
noname#1802

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

> が、b1を実行せずにb2を実行した場合にエラーとなります。 失礼しました。null はオブジェクトでした。というわけで、 if (w1 != null && !w1.closed)w1.close();} としてください。

noname#1802
質問者

お礼

たびたびありがとうございます。 できました! 今後ともよろしくお願いいたします。

その他の回答 (1)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

何処か最初の方で var w1 = null; と変数宣言と初期化をしておく。ウィンドウをクローズするときの判断条件を if (typeof(w1) != "null" && !w1.closed) {  w1.close(); } と、初期化しただけの状態かどうかのチェックを付け加えておく。 # 動作確認までしてません m(_ _)m

noname#1802
質問者

補足

<html><head><script Language="JavaScript"> <!-- var w1=null; function send(re){ if(re>=1){ w1 = window.open("about:blank","w1"); document.forms[0].target="w1"; }else{ document.forms[0].target="_top"; if (typeof(w1) != "null" && !w1.closed)w1.close();} return true;} // --></script> <body><form> <input type="submit" value="b1" onclick="send(1)"> <input type="submit" value="b2" onclick="send(0)"> </form></body></html> 下記のように変更してみました。 が、b1を実行せずにb2を実行した場合にエラーとなります。 *メーラによっては変に表示される場合がありますことお詫びします。

関連するQ&A

  • window.close()で閉じられない

    教えていただけますか? インターネット上のサンプルを参考に 押したらウインドウを閉じるボタンを作ったのですが、 うまく機能しません。 サーバーはレンタルサーバーです どの様にしたら良いでしょうか? インターネット上のサンプルでは閉じられました。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>無題ドキュメント</title> </head> <body> <form> <INPUT type="button" value="閉じる" onClick="window.close()"> <input type="button" value="閉じる" onClick="close()"> </form> <A href="JavaScript:window.close()">閉じる</A> </body> </html>

  • window.close()?でエラー

    javaScriptのwindow.close()で「プログラムにコマンドを送信している時に、エラーが発生しました」と言うエラーが出てしまいます。 但し、Windowは正常にクローズされています。 親画面から子画面をオープンし、子画面のオープン後に親画面自身をクローズしている処理です。 window.opener = window; window.close(); でクローズしています。 宜しくお願いします。

  • ノーマルクローズとノーマルオープン

    あるセンサを使ってエラー監視をしているときに、ノーマルクローズに処理をしている場合とノーマルオープンに処理をしている場合があります。 電気のことはあまり詳しくないのですが、いろいろ調べたところ NOとはノーマルオープンで 何もしていない時オープン(開)(OFF)している状態、別名「A接点」 NCとはノーマルクローズで 何もしていない時クローズ(閉)(ON)している状態、別名「B接点」 というような記述を見つけました。プログラムでエラー監視のレベルに落としこんだ場合には ノーマルクローズならば 異常 → OFF 正常 → ON ということになりそうですが、要するにノーマルクローズに処理をすればセンサが壊れたときに電圧がかからなくなり、0を返すからセンサの不良がわかり易いという意味なのでしょうか? ノーマルクローズにする場合とノーマルオープンにする場合のメリット・デメリットがよく分かりません…

  • Firefoxでwindow.close()が効きません

    Win、MacともIEでは問題ないのですが、Firefoxでwindow.close()が効きません。 Firefoxのバージョンは、Windows→1.0.7、Mac→1.5.0.1です。 ソースは以下のとおりです。 <form> <input type="button" name="Submit" value="ウィンドウを閉じる" onClick="javascript:window.close();"> </form> また、以下の方法も試してみたのですが動作しませんでした。 <SCRIPT language="JavaScript"> <!-- function CloseWin(){ window.close(); } // --> </SCRIPT> <FORM> <INPUT type="button" value="ウィンドウを閉じる" onClick="CloseWin()"> </FORM> aタグのターゲットブランクで別ウィンドウを開いた場合です。よろしくお願いいたします。

  • Closeし忘れるとどうなりますか?

    メールをエントリする処理で、open(MAIL,・・・の 処理を行いますが、open結果のerr==0の場合しか close処理を行っていませんでした。   正常にopenできなかった、もしくはopenのエラーの 場合close処理をしないことになりますが、いいので しょうか。 逆に、openもしていないのに、close処理をこの err!=0の場合に行ったらどうなるのでしょうか。 教えて下さい。

    • ベストアンサー
    • Perl
  • window.closedについて

    ウィンドウが開いているかどうかを確認するため、window.closedを使用しております。(ソースは下記参照) しかし、w1=window.open("","Page2");が一度も実行されていない場合は、w1オブジェクトが存在しないためエラーになってしまいます。 対応方法として、 1、HTML、またはcookieに、Page2を開いたことがあるかどうかフラグを持たせる。 ことを考えていますが、どうもスマートではなく納得がいきません。 その他、対応方法がございましたらご教授ください。 宜しくお願い致します。 ---------------ソース--------------------------- ○Javascript funciton test(){ if(w1.closed){ w1=window.open("","Page2"); } document.frm1.submit(); } ○HTML <a herf="javascript:void(0)" onclick="test();">実行</a> <form method="post" name="frm1" action="#" target="Page2"> <input type="hidden" name="id" value="1115" /> </form>

  • Word VBAで2003はOKだが2007だとエラー

    Wordの2003 で作成したVBAがあるのですが、Word2007の実行するとエラーになってしまいます。 記述-------------------------------------------------- Private Sub Document_Open() Dim macName As String macName = ActiveDocument.Name ~ 処理 ~ Windows(macName).Close saveChanges:=False End Sub ------------------------------------------------------ 上記の Windows(macName).Close saveChanges:=False の部分で、 「実行時エラー 5941  指定されたコレクションのメンバは存在しません。」 のエラーが出てしまします。 以前にも、Office2007 になってからエラーになる記述があって修正したりしたのですが、上記の場合の修正方法がわかりません。 (検索したのですがそれらしい修正方法を見つけられませんでした。) 対処方法がわかりましたら教えて下さい。 宜しくお願いします。

  • document.close();は必要ですか?

    例えば、以下のようなフォームがあるとします。 <form name=f1> <input type=text name=onamae> </form> この欄に入力した名前を同じウィンドウで表示させるとして、関数を N=document.f1.onamae.value; document.write("<html><head></head><body>あなたのお名前は",N,"です。</body></html>"); として実行させれば、表示できるのですが、 この際、document.open()あるいは、document.close()は必要なんでしょうか? 新しいウィンドウを展開する時や別フレームの書換の時だけでいいんでしょうか? 一応、自分で色々調べてみたのですが、必要性までは分からないもんで・・・。 ご存じの方、宜しくお願いします。

  • close(STDOUT)するとCGIが終了する。

    Windows2000+Apache2.2+ActivePerlでCGIを作っています。 CGIで時間のかかる処理を行いたいので、以下のような処理を行いました。 print "Content-type: ~ ~ブラウザに返す文字列を標準出力へ~ close(STDOUT); ~時間のかかる処理~ ところが、「時間のかかる処理」の部分は実行されず、どうやらSTDOUTをクローズしたことにより、 ApacheによってCGIが終了させられてしまうようです。 ネットなどで見るかぎり、UNIX系のサーバーではよく行われる方法のようなのですが、Windowsでの実装になにか違いがあるのでしょうか? また、Windowsサーバーでこのようにブラウザに処理を戻しつつ、時間のかかる処理を行いたい場合にはどうすればよいのでしょうか?

    • ベストアンサー
    • CGI
  • ファイルをクローズしたい

    visual studio 2010 vb.netでの質問です。OpenTextFileWriter での書き込み処理時、エラーが発生した場合、Try,Catch ,FinallyのFinallyの部分でファイルをクローズしたいと思い以下のコードを書きましたが警告 「変数 'tw' は、値が割り当てられる前に使用されています。Null 参照の例外が実行時に発生する可能性があります。」が発生してしまいます。ファイルを必ずクローズしたい(エラーが発生しても、しなくても)と思うのですが、どのようにコードを書けばうまくいくのでしょうか。お教えいただけるとありがたいです。 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim wfileNamePath As String Dim data As String Dim tw As System.IO.TextWriter wfileNamePath = "C:\test\test.txt" Try data = "abcd" tw = My.Computer.FileSystem.OpenTextFileWriter(wfileNamePath, True, System.Text.Encoding.Default) tw.WriteLine(data) Catch ex As Exception MsgBox("エラー発生") Finally tw.Close() End Try End Sub End Class