如何禁用浏览器回发警告对话框

时间:2008-09-18 15:42:11

标签: asp.net javascript internet-explorer-7

我有一个只在IE7(内部网站)上运行的asp.net应用程序。

当用户需要输入数据时,我会弹出一个带有表单的子窗口。当表单关闭时,它调用javascript:window.opener.location.reload(true),以便新数据显示在主页面上。

问题是浏览器抱怨它必须重新发布页面。有没有办法关闭此功能?

7 个答案:

答案 0 :(得分:4)

不,但有一个解决方案。通常认为在有人将数据发布到页面后立即使用302重定向的良好设计。这可以防止弹出窗口发生。请允许我详细说明。

1)用户填写表格并通过POST提交数据。

2)后端接收数据并对其进行操作。

3)后端在完成处理页面后立即发出302重定向,而不是将内容返回给用户(如果需要,可能会将用户重定向回完全相同的URL)

4)用户将看到的页面是您告诉他们的浏览器重定向到的页面。他们将使用标准GET请求加载重定向页面。如果他们尝试刷新页面,则不会重新发布数据。问题解决了。

答案 1 :(得分:1)

这是ASP.NET常用的“回发”方式的问题。如果您需要在没有此警告的情况下重新加载页面,则此页面必须来自GET,而不是POST。你可以自己做一个Response.Redirect(“...”)。但这会破坏viewstate的使用。

答案 2 :(得分:1)

asp.net mvc修复了这个问题,不是ie7唯一的问题,而是大多数浏览器的安全功能。没有我知道的修复,除了你可以用js更新主窗体中的内容而不是重新加载整个页面

答案 3 :(得分:0)

我不相信有办法做到这一点。相反,为什么不将父窗口指向没有重新加载的页面。

javascript:window.opener.location ='your url'

答案 4 :(得分:0)

这是因为window.opener中的页面来自POST请求 也许你可以使用 javascript:window.opener.location = window.opener.location;如果可以在没有POST的情况下获取数据,则只执行GET请求。

答案 5 :(得分:0)

AFAIK,而不是通过你的脚本。

您可以尝试:

window.opener.location = '#';

它应绕过浏览器重新发布。并且,您可以根据需要调整哈希名称。

答案 6 :(得分:0)

如果您从第1页移到第2页,并且想要禁止浏览器返回第1页,请在第1页的顶部添加以下内容。

<script>
if(window.history.forward(1) != null)
                 window.history.forward(1);
</script>