等待几秒钟,然后再关闭页面


Wait few second before closing page

我需要一個劇本,當使用者關閉頁面時,等待幾秒鐘(沒有弹出窗口),然後關閉頁面。

我记得在这里的某个地方看到一种方法,使用 ajax(如果我没记错的话),通过运行一个 php 文件并在关闭前等待答案,但我再也找不到它了。该php文件包含睡眠函数。

任何帮助都非常感谢


(这主要用于淡出文本。当用户进入网站时,文本通过 css3 过渡淡入,当他离开页面时,文本淡出。我只是需要时间淡出。是的,我知道这不是用户友好的,但我被特别要求这样做)

您可能想到了一个同步 ajax 请求(它阻止了 UI):

window.addEventListener('unload',function()
{
    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'script.php?when=unload',false);//<-- false makes request synchronous
    xhr.send();
},false);

但是还有其他方法,请检查此答案
总的来说,我不会做这样的事情。如果一个网站试图拒绝我在我想关闭窗口时关闭窗口的选项,我永远不会再次使用/访问它。事实上,你的JS代码仍然取决于浏览器如何实现它,并且浏览器可以由客户端的操作系统控制。如果我关闭浏览器应用程序,JS事件在这件事上没有什么可说的,特别是如果我终止浏览器进程(使用kill -9或ctrl + alt + del)。

至少可以做的是给客户一个选择,要么强制退出,要么等待,解释为什么你宁愿客户等一会儿:

window.addEventListener('beforeunload',function u(e)
{
    var forceQuit = confirm(''tDo you wish to leave Now?'n
                            if you do, some changes you made won''t be saved');
    if (forceQuit)
    {
        return e;
    }
    //synchronous ajax result here, or:
    e.returnValue = false;
    e.cancelBubble = true;
    if (e.preventDefault)
    {
        e.preventDefault();
        e.stopPropagation();
    }
    setTimeout(function()
    {//first, remove handler, so the beforeunload's behaviour is back to default
        window.removeEventListener('beforeunload',u,false);
        //dispatch new beforeunload event:
        window.dispatchEvent( new Event('beforeunload'));
    },5000);
},false);

看看 jquery unload。您可以将延迟函数绑定到unload事件。