在windows.open()

时间:2017-09-13 05:01:32

标签: javascript java jquery html spring-mvc

我有控制器,我生成并下载文件。 当用户单击“下载”按钮时,将执行以下代码:

_statusWindow = window.open('downloadCSV', "_statusWindow");
_statusWindow.document.write('<div>  Please wait while we processing your request</div>');
_statusWindow.document.title = "Downloading...";

它指向控制器downloadCSV,它生成文件(不返回任何视图) 因此,当生成文件时,新窗口打开 - 下载完成后自动下载并关闭窗口。 当我没有这一行时,这段代码工作正常:

_statusWindow.document.write('<div>  Please wait while we processing your request</div>');

但我想附加此行以向用户显示消息。 有了这一行(正如我在第一个代码片段中所示),只有点击按钮TWICE才会开始下载!我不明白为什么。当我点击一次 - 它只是显示消息,没有调用控制器和生成文件,当我第二次调用它时 - 它开始下载...

任何建议,请帮助

2 个答案:

答案 0 :(得分:1)

我怀疑在下载完成之前该消息是否保留在窗口上,请您试试下面的代码..

var win = window.open("","_statusWindow");
var html = '<html><head></head><body>Please wait while we processing your 
request...</body></html>';
var iframe = win.document.createElement('iframe');
iframe.src = 'data:text/html;charset=utf-8,' + encodeURI(html);
iframe.onload = window.open("downloadCSV","_statusWindow");
win.document.body.appendChild(iframe);

答案 1 :(得分:1)

你可以尝试一下,我试图以iframe的形式打开下载,并在加载iframe时关闭窗口..希望它可能有用..

 var win = window.open("","_statusWindow");
 var html = '<html><head><title>Base</title></head><body>Please wait while 
   we processing your request...</body></html>';
 var iframe = win.document.createElement('iframe');
 iframe.src = 'data:text/html;charset=utf-8,' + encodeURI(html);
 win.document.body.appendChild(iframe);
 var iframe2 = win.document.createElement('iframe');
 iframe2.src = "downloadCSV";
 iframe2.onload= win.close();
 win.document.body.appendChild(iframe2);