Javascript 关闭脚本执行结束时的弹出窗口

Javascript 关闭脚本执行结束时的弹出窗口,javascript,Javascript,我有一个php页面来创建excel文件并将其保存到文件夹中。我从一个页面开始,用户点击一个按钮来启动脚本。我的目标是执行以下步骤: 在另一个窗口中运行脚本(我现在使用一个小弹出窗口) 当脚本结束时,关闭弹出窗口,并在主窗口中显示一个警报,表示执行正常 警报关闭时,刷新主窗口中显示的文件列表 我知道如何做所有这些事情,只有一件:当脚本在弹出窗口中结束时,如何触发任何事件(弹出窗口关闭和警报? 弹出窗口的实际代码如下所示: $('#elabora').click(function(e){ e

我有一个php页面来创建excel文件并将其保存到文件夹中。我从一个页面开始,用户点击一个按钮来启动脚本。我的目标是执行以下步骤:

  • 在另一个窗口中运行脚本(我现在使用一个小弹出窗口)
  • 当脚本结束时,关闭弹出窗口,并在主窗口中显示一个警报,表示执行正常
  • 警报关闭时,刷新主窗口中显示的文件列表
  • 我知道如何做所有这些事情,只有一件:当脚本在弹出窗口中结束时,如何触发任何事件(弹出窗口关闭和警报?

    弹出窗口的实际代码如下所示:

    $('#elabora').click(function(e){
        e.preventDefault();
        var data = $('#data_rif').val();
        if (data=='') {
            $("#spnmsg").fadeTo(200,0.1,function(){
                $(this).removeClass().addClass('spn_error').html("Inserisci una data di riferimento per l'elaborazione").fadeTo(900,1);
            });
        }else{
            window.open('sofferenze/trxls.php?data='+data, "popupWindow", "width=10,height=10");
    //here is where I want to trigger that when trxls.php ends the alert should be displayed.
        }
    });
    
    脚本(仅限开头和结尾)


    您在卸载之前是否尝试过使用
    on

    window.onbeforeunload = function (event) {
        // ...
    }
    
    编辑:只需将此事件添加到打开的窗口中,如下所示:

    $('#elabora').click(function(e){
        e.preventDefault();
        var data = $('#data_rif').val();
        if (data=='') {
            $("#spnmsg").fadeTo(200,0.1,function(){
                $(this).removeClass().addClass('spn_error').html("Inserisci una data di riferimento per l'elaborazione").fadeTo(900,1);
            });
        }else{
            var wndRef = window.open('sofferenze/trxls.php?data='+data, "popupWindow", "width=10,height=10");
            wndRef.onbeforeunload = function (event) {
                  // Show your alert
            }
        }
    });
    
    编辑:您可以从脚本关闭窗口。事实上,浏览器不允许关闭当前打开的窗口。您应该从调用者处调用close函数,但这里有一个关闭它的小技巧,无论如何,请使用此函数:

    function close_popupWindow() {
        window.self.opener = window.self;
        window.self.close();
    }
    

    您在卸载之前是否尝试过使用
    on

    window.onbeforeunload = function (event) {
        // ...
    }
    
    编辑:只需将此事件添加到打开的窗口中,如下所示:

    $('#elabora').click(function(e){
        e.preventDefault();
        var data = $('#data_rif').val();
        if (data=='') {
            $("#spnmsg").fadeTo(200,0.1,function(){
                $(this).removeClass().addClass('spn_error').html("Inserisci una data di riferimento per l'elaborazione").fadeTo(900,1);
            });
        }else{
            var wndRef = window.open('sofferenze/trxls.php?data='+data, "popupWindow", "width=10,height=10");
            wndRef.onbeforeunload = function (event) {
                  // Show your alert
            }
        }
    });
    
    编辑:您可以从脚本关闭窗口。事实上,浏览器不允许关闭当前打开的窗口。您应该从调用者处调用close函数,但这里有一个关闭它的小技巧,无论如何,请使用此函数:

    function close_popupWindow() {
        window.self.opener = window.self;
        window.self.close();
    }
    

    如果希望在脚本结束时在新窗口中执行某些操作,请按照Ludvoic的建议使用onbeforeunload

    另一方面,如果您希望在子页面运行脚本后在父页面中执行某些操作,则情况就不同了。您在问题中暗示了这一点,因此将回答此场景

    您可以使用
    localstorage
    ,前提是两个页面都来自同一个域。脚本运行完毕后,子页面可以更新一个值。父页面可以监听
    存储
    事件,以了解该事件何时发生。下面是一篇讨论如何跨选项卡共享数据的帖子:

    在父页面中:

    $('#elabora').click(function(e){
        e.preventDefault();
        var data = $('#data_rif').val();
        if (data=='') {
            $("#spnmsg").fadeTo(200,0.1,function(){
                $(this).removeClass().addClass('spn_error').html("Inserisci una data di riferimento per l'elaborazione").fadeTo(900,1);
            });
        }else{
            localStorage.popup_script_done = false;
            window.open('sofferenze/trxls.php?data='+data, "popupWindow", "width=10,height=10");
        }
    });
    
    $(window).bind('storage', function (e) {
        if (localStorage.popup_script_done == true) {
            // Do stuff
        }
     });
    
    在弹出窗口中:

    // Do stuff
    localStorage.popup_script_done = true;
    

    如果希望在脚本结束时在新窗口中执行某些操作,请按照Ludvoic的建议使用onbeforeunload

    另一方面,如果您希望在子页面运行脚本后在父页面中执行某些操作,则情况就不同了。您在问题中暗示了这一点,因此将回答此场景

    您可以使用
    localstorage
    ,前提是两个页面都来自同一个域。脚本运行完毕后,子页面可以更新一个值。父页面可以监听
    存储
    事件,以了解该事件何时发生。下面是一篇讨论如何跨选项卡共享数据的帖子:

    在父页面中:

    $('#elabora').click(function(e){
        e.preventDefault();
        var data = $('#data_rif').val();
        if (data=='') {
            $("#spnmsg").fadeTo(200,0.1,function(){
                $(this).removeClass().addClass('spn_error').html("Inserisci una data di riferimento per l'elaborazione").fadeTo(900,1);
            });
        }else{
            localStorage.popup_script_done = false;
            window.open('sofferenze/trxls.php?data='+data, "popupWindow", "width=10,height=10");
        }
    });
    
    $(window).bind('storage', function (e) {
        if (localStorage.popup_script_done == true) {
            // Do stuff
        }
     });
    
    在弹出窗口中:

    // Do stuff
    localStorage.popup_script_done = true;
    

    在主页上,我没有在卸载前开火。你能详细说明一下这一点吗?@LelioFaieta你不能在脚本结束时关闭窗口吗?这是一个php脚本,可以生成一个excel文件并将其保存到服务器上的文件夹中。我试着用一个脚本来结束它,但没有做这个小把戏——编辑问题。添加了我运行的脚本。窗口关闭呼叫不起作用work@LelioFaieta我添加了一个小代码,演示如何在卸载之前关闭主页面上的窗口。你能详细说明一下这一点吗?@LelioFaieta你不能在脚本结束时关闭窗口吗?这是一个php脚本,可以生成一个excel文件并将其保存到服务器上的文件夹中。我试着用一个脚本来结束它,但没有做这个小把戏——编辑问题。添加了我运行的脚本。窗口关闭呼叫不起作用work@LelioFaieta我添加了一个显示如何关闭窗口的小代码