【问题标题】:How can I start a download and close browser如何开始下载并关闭浏览器
【发布时间】:2016-10-22 21:02:03
【问题描述】:

我正在尝试编写一个网页,该网页将下载"myfile.docx",然后在下载完成时自行关闭。 这是我得到的

   <html>
    <body>
        <form method='get' action='myfile.docx' name='startDownload'>
        </form>
        <script>
        document.startDownload.submit();
        window.close();
        </script>
    </body>
    </html>

问题是页面没有关闭。请尽量简短

【问题讨论】:

  • 将它用于 Edge 和 Chrome window.top.close();,但你实现它比你应该做的更简单
  • 我也猜想在下载完成时关闭窗口是不可能的,你可以在下载开始时关闭它,但这是一个非常糟糕的做法,除非你的窗口是弹出窗口

标签: javascript html


【解决方案1】:

首先the submit method不会阻塞,所以window.close方法会被立即调用。当文件下载完成时,我不知道有什么方法可以接收通知。其次,您只能在通过脚本打开的window 上调用window.close,而不是通过用户干预(参见https://stackoverflow.com/a/19768082/657401)。

【讨论】:

    【解决方案2】:

    这行得通:

    <html>
    <body>
    <a href='myfile.docx' id='myfile' name='fileToDownload'>Download</a>
    <script>
    
    document.getElementById('myfile').click();
    console.log(new Date());
    console.log('Dude!');
    sleep(4000);//wait for the file to finish downloading
    console.log(new Date());
    
    window.close()
    function sleep(milliseconds) {
      var start = new Date().getTime();
      for (var i = 0; i < 1e7; i++) {
        if ((new Date().getTime() - start) > milliseconds){
          break;
        }
      }
    }
    </script>
    </body>
    </html>
    

    【讨论】:

    • 通过调用 sleep 函数,您将冻结用户的浏览器 4 秒钟(在线程浏览器中,您可能只冻结当前窗口)。 setTimeout(function() { window.close() }, 4000); 怎么样?此外,文件可能不会在 4 秒内完成下载,尽管这并不重要,因为如果您打开其他窗口,浏览器将继续下载文件。如果这是唯一打开的窗口,那么它不太可能是使用脚本打开的,所以window.close 不会做它的事情。总的来说,我认为你不明白自己在做什么。
    猜你喜欢
    • 2010-10-10
    • 2014-02-08
    • 1970-01-01
    • 2017-09-10
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    相关资源
    最近更新 更多