【问题标题】:Detect When Specific Tab Closes检测特定选项卡何时关闭
【发布时间】:2016-03-16 20:36:09
【问题描述】:

我有一个 .php 文件正在运行,它正在生成一个可下载的文件;当 .php 文件运行时,它会在浏览器中打开一个选项卡。根据创建文件的条件,有时 .php 文件最多需要 15 秒。

我想知道此选项卡何时打开并生成可下载文件,何时关闭。这样我可以在生成文件时显示某种加载消息。当 .php 文件完成创建文件后,它会自动关闭选项卡。

代码:

var win = window.open(download, '_blank'); //opens the php file which generates the file.
if (win)
{
    win.focus();
    //have some sort of message stating to wait for the file to download here and then close it when the php file finishes running.
}
else
{
    alert("Please allow popups.");
}

closePopup2();

【问题讨论】:

  • 试试 win.document.write("")
  • 这似乎不起作用。

标签: javascript window focus detect


【解决方案1】:

我建议不要在新选项卡中打开 PHP 文件,而是使用 XMLHttpRequest(),您可以在 MDN 上找到有关如何使用它的指南

你可以这样使用它:

function reqListener () {
  console.log(this.responseText); // Will log full output of page
}

var oReq = new XMLHttpRequest();
oReq.addEventListener("load", reqListener);
oReq.open("GET", download);
oReq.send();

【讨论】:

  • 而不是将文件输出到页面,如何将其输出为可下载文件,就像我执行 var win = window.open(download, '_blank') 时返回的内容一样;?使用您的代码,文件只是输出到控制台,但我希望它是一个可下载的文件。
  • 嗯...我不知道该怎么做。你可以试试window.open(this.responseText, '_blank')
  • 我通过替换 console.log(this.responseText); 尝试了您提出的解决方案;与 window.open(this.responseText, '_blank');。这导致弹出一个新选项卡,但我收到 403 Forbidden 错误,因此我在 oReq.open() 请求中添加了用户名和密码,但这并没有解决问题。我正在做更多的调查,但我相信这可能接近解决方案。如果您有任何进一步的想法,请告诉我。我会继续研究,如果我能让它工作,我会接受你的回答!谢谢。
  • 只是检查一下,您希望弹出一个窗口,然后默认警报显示“您要下载此文件/另存为吗?”
  • 其实看看this answerthis simpler answer。它将标头设置为基本上说明数据是可下载的文件。试试看它是否有效......
【解决方案2】:

为您的窗口提供一个唯一的 ID,以便脚本知道要检查哪一个(如果多次打开/关闭,可能需要随机)。我不知道你是否需要集中注意力,弹出权限是你自己弄清楚的,但我认为以下应该可行:

var win = window.open(download, 'windowID', 'width:300px;height:300px');
win.document.write("<p>One moment please!</p>");
win.focus();

var test = setInterval(function() {   
    if(win.closed) {  
        clearInterval(test);  
        // do you stuff here after window closed
    }  
}, 500); 

【讨论】:

    猜你喜欢
    • 2022-01-06
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 2015-09-20
    相关资源
    最近更新 更多