如何结合内容处置:附件暂时停用onbeforeunload-message?

时间:2013-05-23 21:38:55

标签: php javascript attachment onbeforeunload content-disposition

我有一页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 - 数据重新填充表单。因此,我将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以某种方式没有完全重新加载有关,因为加载了其他页面......)

1 个答案:

答案 0 :(得分:0)

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

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

将其放入onclick 因此,当有内容显示时,页面会自动重新加载,但是当只有附件时,计时器会自动启动