【问题标题】:Chrome quietly resubmitting form in iframe on browser back buttonChrome 在浏览器后退按钮上的 iframe 中悄悄地重新提交表单
【发布时间】:2016-01-14 19:52:19
【问题描述】:

在我正在开发的房地产网站上,我在“房产详细信息”页面上有一个“联系我们”表单,用户可以在该表单中单击“联系我们”按钮,该按钮将在模式对话框中加载该表单,一个 iframe 加载与我们联系表格,填写一些详细信息并发送出去。

一旦表单在服务器端处理完毕,我必须从调用对话框关闭方法的服务器发出 JavaScript 代码,然后将用户重定向到感谢页面(如果我在服务器上进行了简单的重定向,iframe 会得到我不想要的感谢页面)。

问题出在 Chrome 中,如果您点击浏览器的后退按钮,联系人表单会被悄悄重新提交。

注意:IE 和 Firefox 根本没有这个问题。

我发现以下链接有用,但不能解决我的问题:

我们尝试了各种技术来规避 Chrome 中的问题,例如隐藏字段、保险缓存已关闭、在重定向到感谢页面之前销毁 iframe。没有什么它会不断重新提交表单,甚至不询问您是否要重新提交(不是说它应该重新提交)

【问题讨论】:

  • 如果是浏览器错误,您无法解决问题。我的建议是,考虑使用单页应用程序架构,即使对于这个小部分,也没有返回按钮,或者至少没有重新加载父文档的按钮。
  • 您正在控制与我们联系表格所在的 iframe?还是外部的?
  • @SilentTremor 这是我们的表格,所以我们可以完全控制。为什么你在想什么?
  • 向发布的对象添加一个空的隐藏字段,如果您在框架表单上有提交按钮,当您按下提交按钮时该字段将被填充,如果您可以这样做,我可以帮助您捕捉替换和从 javascript 发布。
  • 如果在模型隐藏属性上按下按钮,实际点击,在经典的 asp.net 中,您可以获得事件源(表单有 2 个按钮)

标签: javascript asp.net-mvc google-chrome iframe form-submit


【解决方案1】:

刚刚遇到这个问题,我想做的是在表单中包含某种一次性令牌(即 GUID),如果我们在服务器上重新检测到,我们可以忽略表单发布。可能使用服务器上的会话状态来跟踪 - 很像 Rails authenticity token

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2012-01-23
    • 2011-10-30
    • 2015-02-14
    • 2019-02-17
    • 2012-11-08
    • 2018-03-26
    相关资源
    最近更新 更多