防止Firefox重新加载确认

时间:2012-09-27 13:01:20

标签: javascript firefox google-chrome reload onbeforeunload

我在可编辑的表格中显示某些记录。当用户在编辑弹出的记录时尝试重新加载表时,会警告有关未保存数据的记录。

function cancelProcess()
{
    if(noEditedRecords !=0)//number of edited records in the table
    {
        var processConfirmation = confirm("You've Edited "+ noEditedRecords +" Records. Are You sure to undo the Changes made?");

        if (processConfirmation ==true){
            window.onbeforeunload = null;
            window.location.reload();
        }
    }
}

当他点击“确定”重新加载页面时,Firefox会提示

  

要显示此页面,Firefox必须发送重复之前执行的任何操作(例如搜索或订单确认)的信息。

在Chrome中打开同一页面时,不会出现此类提示。

我试图通过设置window.onbeforeunload = null;来避免这种情况,但仍会出现提示窗口。

我还尝试更改Firefox配置:

browser.sessionstore.postdata

按照Mozilla支持页面中的建议将0更改为1

但没有任何效果......如何阻止提示?

6 个答案:

答案 0 :(得分:36)

使用

window.location=window.location;

而不是

location.reload();

为我工作。

答案 1 :(得分:1)

window.opener.location.href = window.opener.location;

我找到了决定here

(在Firefox 32和Chrome 38上成功测试过。)

答案 2 :(得分:1)

我解决了这个问题,并且仅将数据发送为 GET 而不是 POST

我不满足所有需求,但它有效....

我也在使用 location.reload();

答案 3 :(得分:1)

行为是正确的。根据w3schools重新加载有一个参数 forceGet ,默认为false,因此如果你有POST提交,浏览器将尝试重新发送该POST数据,因此,它需要你的确认。 Firefox做得很好,谷歌浏览器的行为类似于 forceGet

的默认值为true

http://www.w3schools.com/jsref/met_loc_reload.asp

虽然window.location=window.locationwindow.location=window.location.href(或其他任何变体)在大多数时间都有效,但当您使用http://www.google.com#test之类的锚定网址时,此方法无法刷新。当您已经在google.com上时,浏览器将执行与完成相同的操作,并通过添加#test来更改网址。浏览器只会尝试在名称为test的页面中找到锚标记,然后向下滚动到该标记,而不刷新浏览器。

在这种情况下工作的解决方案以及我遇到的任何其他情况都是window.location.reload(true);

希望这有帮助,

Alexandru Cosoi

答案 4 :(得分:0)

避免该提示的方法是不要创建用户尝试重新加载POST结果页面的情况。

答案 5 :(得分:0)

试试这个。

setTimeout (function () {
    window.location.reload();
},0);