【发布时间】:2016-01-14 19:52:19
【问题描述】:
在我正在开发的房地产网站上,我在“房产详细信息”页面上有一个“联系我们”表单,用户可以在该表单中单击“联系我们”按钮,该按钮将在模式对话框中加载该表单,一个 iframe 加载与我们联系表格,填写一些详细信息并发送出去。
一旦表单在服务器端处理完毕,我必须从调用对话框关闭方法的服务器发出 JavaScript 代码,然后将用户重定向到感谢页面(如果我在服务器上进行了简单的重定向,iframe 会得到我不想要的感谢页面)。
问题出在 Chrome 中,如果您点击浏览器的后退按钮,联系人表单会被悄悄重新提交。
注意:IE 和 Firefox 根本没有这个问题。
我发现以下链接有用,但不能解决我的问题:
- https://productforums.google.com/forum/#!topic/chrome/J1KMARIIHW4
- https://code.google.com/p/chromium/issues/detail?id=263508(这个似乎非常接近我所看到的行为 - 但它似乎是一个在过去几年中不断重新出现的错误)
- Chrome executing all JS again on browser back button
我们尝试了各种技术来规避 Chrome 中的问题,例如隐藏字段、保险缓存已关闭、在重定向到感谢页面之前销毁 iframe。没有什么它会不断重新提交表单,甚至不询问您是否要重新提交(不是说它应该重新提交)
【问题讨论】:
-
如果是浏览器错误,您无法解决问题。我的建议是,考虑使用单页应用程序架构,即使对于这个小部分,也没有返回按钮,或者至少没有重新加载父文档的按钮。
-
您正在控制与我们联系表格所在的 iframe?还是外部的?
-
@SilentTremor 这是我们的表格,所以我们可以完全控制。为什么你在想什么?
-
向发布的对象添加一个空的隐藏字段,如果您在框架表单上有提交按钮,当您按下提交按钮时该字段将被填充,如果您可以这样做,我可以帮助您捕捉替换和从 javascript 发布。
-
如果在模型隐藏属性上按下按钮,实际点击,在经典的 asp.net 中,您可以获得事件源(表单有 2 个按钮)
标签: javascript asp.net-mvc google-chrome iframe form-submit