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

时间:2016-02-15 15:22:17

标签: javascript

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

  1. 在另一个窗口中运行脚本(我现在使用的是一个小弹出窗口);
  2. 当脚本结束时关闭弹出窗口并在主窗口中显示警告,说明执行正常;
  3. on alert close刷新主窗口中显示的文件列表。
  4. 我知道怎么做所有这些东西但只有一个:如何在弹出脚本结束时触发任何事件(弹出关闭和警报)?

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

    $('#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.
        }
    });
    

    脚本(仅限开始和结束)

    <?php
    header('Cache-Control: max-age=1');
    header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
    header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
    header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
    header ('Pragma: public'); // HTTP/1.0
    $cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_sqlite3;
    PHPExcel_Settings::setCacheStorageMethod($cacheMethod);
    // Create a new PHPExcel object 
    $ea = new PHPExcel();
    ...
    
    $objWriter = PHPExcel_IOFactory::createWriter($ea, 'Excel2007');
    ob_end_clean();
    //$objWriter->save('php://output');
    $objWriter->save('trackrecord/'.$data.'_trackrecord.xlsx"');
    exit();
    echo "<script>window.close();</script>";
    ?>
    

2 个答案:

答案 0 :(得分:0)

您是否尝试过onbeforeunload

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();
}

答案 1 :(得分:0)

如果您想在脚本结束时在新窗口中执行某些操作,请使用onbeforeunload,如Ludvoic建议的那样。

另一方面,如果您想在子页面运行完脚本之后在父页面中执行某些操作,那么这是另一回事。你在问题中暗示了这一点,因此将回答这种情况。

如果两个页面都来自同一个域,则可以使用localstorage。脚本运行完毕后,子页面可以更新值。父页面可以侦听storage事件以了解何时发生这种情况。这是一篇讨论如何跨标签共享数据的帖子:

Javascript; communication between tabs/windows with same origin

在父页面中:

$('#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;