我有一个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.
}
});
脚本(仅限开始和结束)
<?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>";
?>
答案 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;