トップ回答者
ファイルダウンロードの際の元画面制御について

質問
-
お世話になっております。
現在、VS.NET2005、ASP2.0 で開発しています。
webページの印刷ボタンを押下すると
はい、いいえ、キャンセルボタンがあるダイアログ(A)が現れ、
「はい」を押下→印刷→ダイアログ(A)を閉じる
「いいえ」を押下→ファイルダウンロード→ダイアログ(A)を閉じる
「キャンセル」を押下→ダイアログ(A)を閉じる
という仕様になっています。「はい」の場合は、仕様通りにダイアログ(A)を閉じます。
「いいえ」の場合は、ファイルダウンロードダイアログが表示され
ダイアログ(A)は閉じないままです。以下に、コードを記します。
ファイルダウンロードダイアログを表示しつつ
元の画面を閉じることは出来ないのでしょうか?Protected Sub btnYes_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnYes.Click
Dim repUrl As String = ""
If Not IsNothing(Session("REPURL")) Then
repUrl = Session("REPURL").ToString
End IfDim script As StringBuilder = New StringBuilder()
script.Append("<script language='JavaScript'>")
script.Append("window.open('" + repUrl + "', '_blank');")
script.Append("window.close();")
script.Append("</script>")ScriptManager.RegisterClientScriptBlock(Me, GetType(Page), "OpenWindow", script.ToString(), False)
End Sub
Protected Sub btnNO_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnNO.Click
'レスポンスに対して各種設定をする
Response.ContentType = "application/download"
Response.AppendHeader("Content-Disposition", "attachment;filename=default.txt")
Response.ContentEncoding = Encoding.GetEncoding("Shift_JIS")
If Not IsNothing(Session("TEXT")) Then
Response.Write(Session("TEXT").ToString)
End If
Response.End()Dim script As StringBuilder = New StringBuilder()
script.Append("<script language='JavaScript'>")
script.Append("window.close();")
script.Append("</script>")ScriptManager.RegisterClientScriptBlock(Me, GetType(Page), "CloseWindow", script.ToString(), False)
End Sub
回答
-
実際に検証していないので、いまいち自信はありませんが、以下の方法で
試してみてはいかがでしょうか?<その1>
「はい」の方は「ダイアログ(A)」がうまく閉じるということのようです
ので、ダウンロードするための Web フォーム(例: download.aspx)を
別に作って、「はい」の場合と同様に、Code Snippetscript.Append("window.open('download.aspx', '_blank');")
script.Append("window.close();")のようにする。
<その2>
btnNO_Click は Response.Redirect("download.aspx") のみとし、ボタンの
OnClientClick プロパティに、ブラウザを閉じるための JavaScript を設定
する。例えば、Code Snippetonclientclick="BLOCKED SCRIPTsetTimeout('self.close()', 1000);"
以前 IE7 で試したとき、self.Close() のみでは閉じなかったので、上記の
ようしました。ブラウザによるのかもしれませんが、タイミングが問題のよ
うです。また、閉じられる前に「ウィンドウは、表示中の Web ページにより
閉じられようとしています。このウィンドウを閉じますか?」という確認ダ
イアログが出て、うっとうしいかも知れません。
すべての返信
-
実際に検証していないので、いまいち自信はありませんが、以下の方法で
試してみてはいかがでしょうか?<その1>
「はい」の方は「ダイアログ(A)」がうまく閉じるということのようです
ので、ダウンロードするための Web フォーム(例: download.aspx)を
別に作って、「はい」の場合と同様に、Code Snippetscript.Append("window.open('download.aspx', '_blank');")
script.Append("window.close();")のようにする。
<その2>
btnNO_Click は Response.Redirect("download.aspx") のみとし、ボタンの
OnClientClick プロパティに、ブラウザを閉じるための JavaScript を設定
する。例えば、Code Snippetonclientclick="BLOCKED SCRIPTsetTimeout('self.close()', 1000);"
以前 IE7 で試したとき、self.Close() のみでは閉じなかったので、上記の
ようしました。ブラウザによるのかもしれませんが、タイミングが問題のよ
うです。また、閉じられる前に「ウィンドウは、表示中の Web ページにより
閉じられようとしています。このウィンドウを閉じますか?」という確認ダ
イアログが出て、うっとうしいかも知れません。