防止Firefox重新加载确认

问题描述 投票:16回答:6

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

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。

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

javascript firefox google-chrome reload onbeforeunload
6个回答
36
投票

运用

window.location=window.location;

代替

location.reload();

为我工作。


1
投票
window.opener.location.href = window.opener.location;

我找到了决定here

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


1
投票

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

它不适合所有需要,但它的工作....

我也在使用location.reload();


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


0
投票

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


0
投票

试试这个。

setTimeout (function () {
    window.location.reload();
},0);
© www.soinside.com 2019 - 2024. All rights reserved.