防止Firefox重新加载确认

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

将0更改为1,正如Mozilla支持页面建议的那样。

但是什么都没有起作用… 我该如何避免这个提示呢?


我有一种感觉,你需要的东西与你所询问的不同。有没有可能展示一下你的代码? - Jesse Jashinsky
@JesseJ 已经包含了代码.. - Emmi
9个回答

39

使用

window.location=window.location;

不是

location.reload();

为我工作。


对我来说完美运作!! - Ravi Hirani
你救了我的一天 ;) - Quinn Wynn

3

在Firefox 82(mac)中,我找到了(非常幸运的)正确参数进行更改:

dom.confirm_repost.testing.always_accept设置为true,确认请求窗口将消失。


2
行为是正确的。根据w3schools,reload有一个参数forceGet,默认值为false。因此,如果您有一个POST提交,浏览器将尝试重新发送该POST数据,并因此需要您的确认。Firefox做得很好,而Google Chrome的行为就像它对forceGet有一个默认值为true一样。

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

虽然 window.location=window.location 或者 window.location=window.location.href(或者其他变体)在大多数情况下都有效,但是当你使用像 http://www.google.com#test 这样的锚点 URL 时,这种方法将无法刷新页面。浏览器会做与你已经在 google.com 上并通过添加 #test 更改 URL 时相同的事情。浏览器将尝试定位页面中名称为 test 的锚点标签,并滚动到它,而不刷新您的浏览器。

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

希望这可以帮助您,

Alexandru Cosoi


2
我解决了这个问题,只发送GET数据而不是POST数据。这可能不适用于所有需求,但它有效。我还使用了location.reload();

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

我已经找到了决策这里。(在Firefox 32和Chrome 38上测试成功。)

0

试试这个。

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

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

除了重新加载窗口,有没有其他方法将窗口恢复到先前的状态? - Emmi
你可以使用JavaScript来进行AJAX操作。 - Jesse Jashinsky
@Emmi 这取决于你想要什么样的先前状态。例如,只需将焦点放在URL栏上,然后按Enter键,可能会实现你想要的效果。 - Boris Zbarsky

0

这个解决方案对我有用:

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

-> 使用location.reload()或window.location=window.location重新加载页面。


0

不要使用location.reload(),而是使用location.href = "file_where_you_are.php";这可以防止重复提交,也可以防止消息出现。


这本质上与现有的得票最高答案相同。 - Stephen Ostermiller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接