如何暂时停用onbeforeunload message与内容处置附件



我有一个页面insert.php,用户可以在其中输入表单。

当页面关闭时,我使用javascript通知用户插入的数据可能丢失。

<script language="JavaScript">
    var needToConfirm = true;
    window.onbeforeunload = confirmExit;
    function confirmExit() {
        if ( needToConfirm )
        return "This page is asking you to confirm that you want to leave - data you have entered may not be saved.";
    }
</script>

然后我有一个表单,其中包含一个元素来下载("保存")插入的数据。

<form action='insert.php' method='post'>
    ... other input elemets ...
    <input type="submit" name="save" value="Save" onclick="needToConfirm = false;">
</form>

当按下这个保存按钮时,没有数据丢失,因为表单只是重新加载自己并使用$_POST -data重新填充表单。因此,我将needToConfirm变量设置为false,以免用户担心。

此外,$_POST数据在重新加载页面(insert.php)时下载,使用:

session_start();
... store $_POST in $_SESSION ...
Header( 'HTTP/1.1 301 Moved Permanently');
Header($'Location: save.php');

save.php中我这样做:

session_start();
header( 'Content-disposition: attachment; filename=download.dat' );
... echo $_SESSION-data ...

这将下载插入的数据而不关闭已经加载的insert.php

问题是javascript needToConfirm -变量停留在false上。因此,当我在点击下载后关闭页面时(即使下载没有得到用户的确认),不再显示任何警告,数据可能丢失。

如果你能想出解决这个问题的办法,我将不胜感激。

(我猜这个问题是有关insert.php不知怎的没有完全重新加载由于其他页面的加载…)

您需要设置一个计时器,并在超时后,将值再次重置为true(您不应该使用大于100ms的值)

window.setTimeout('needToConfirm=true', 100);

放到onclick中因此,当有内容要显示时,页面会自行重新加载,但当只有附件时,计时器会触发

相关内容

  • 没有找到相关文章

最新更新