OSはWindows7、ブラウザはIE11での動作について、不具合か否か、またアップデート等で解決済みかについて教えてください。
確認したい動作は、onbeforeunloadイベントが1操作で2回呼ばれる動作についてです。
onbeforeunloadイベントが設定されているウェブページで一度ブラウザ右上の×ボタンを押し「このページから移動しますか。」のメッセージを表示させ「ページにとどまる」を選択した後、ファイルダウンロードを行うサーブレットの呼び出しを行った際にonbeforeunloadが2回呼ばれ、結果、メッセージが2回出力されました。
一度も×ボタンを押さない場合は、メッセージは1回しか出ません。また、Edgeでは同一の操作を行った場合でもメッセージは1回しか表示されません。このことから、本事象が発生する操作時のメッセージの出力は1回であることが正常な動作と思われます。
本事象はIE側の不具合でしょうか。すでにアップデート等で解決済みであればそのアップデート内容を教えていただけるとありがたいです。
よろしくお願いします。
下記に事象が発生するソースを記載します。
【HTMLのソース】
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>Sample</title>
<script type="text/javascript">
window.onbeforeunload = function() {
return "メッセージ表示";
}
</script>
</head>
<body>
<form action="※サーブレットのアドレス" method="post">
<input type="submit" value="Download">
</form>
</body>
</html>
【サーブレットのソース抜粋】
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
OutputStream out = null;
InputStream in = null;
try{
response.setContentType("text/html");
response.setHeader(
"Content-Disposition",
"attachment;
filename=\"" + "test.txt" + "\"");
response.setHeader("Cache-Control",
"private");
response.setHeader("Pragma",
"");
in = new FileInputStream("※ダウンロード用ダミーファイル");
out = response.getOutputStream();
byte[] buff = new byte[1024];
int len = 0;
while ((len = in.read(buff, 0, buff.length)) != -1) {
out.write(buff, 0, len);
}
}finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
}
}
if (out != null) {
try {
out.close();
} catch (IOException e) {
}
}
}
}