17

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

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 。

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

4

8 回答 8

38

使用

window.location=window.location;

代替

location.reload();

为我工作。

于 2013-08-19T18:58:26.377 回答
2

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

它不适合所有需求,但它有效....

我也在使用location.reload();

于 2014-12-04T12:06:20.367 回答
2

使用 Firefox 82 (mac) 我发现(运气好)正确的参数可以改变:

dom.confirm_repost.testing.always_accept设置 为 true

确认请求窗口将消失。

于 2021-10-20T16:07:10.530 回答
1
window.opener.location.href = window.opener.location;

我在这里找到了决定

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

于 2013-05-24T07:40:58.763 回答
1

行为是正确的。根据 w3schools reload 有一个默认为 false 的参数forceGet,因此如果您有 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之类的锚 URL 时,此方法不会刷新。当您已经在 google.com 上并通过添加#test 更改 url 时,浏览器将执行完全相同的操作。浏览器只会尝试在名称为 test 的页面中找到锚标记,然后向下滚动到它,而不刷新浏览器。

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

希望这可以帮助,

亚历山德鲁·科索伊

于 2016-12-13T13:48:29.593 回答
0

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

于 2012-09-28T04:31:39.663 回答
0

尝试这个。

setTimeout (function () {
    window.location.reload();
},0);
于 2013-09-20T23:19:50.680 回答
0

该解决方案对我有用:

-> 将 POST 请求转换为 GET 请求。

-> location.reload() 到 window.location=window.location

于 2021-12-02T19:37:47.010 回答