【问题标题】:how to disable F5 keyboard keys如何禁用F5键盘键
【发布时间】:2010-01-13 11:12:24
【问题描述】:

我正在做在线出租车预订服务,

一旦用户成功完成他的旅程,

我们显示感谢预订,我们显示预订 ID,有些人按 F5

键,所以页面刷新并插入新条目,

所以我想在我的 cashthankyou 页面上停用 F%,

谢谢 巴拉尼库马尔

【问题讨论】:

  • 请注意,不只是 Windows。其他操作系统有其他组合,例如 Control+R 或 Command+R。

标签: javascript


【解决方案1】:

你不会有太多运气 - 按键的控制/检测很大程度上依赖于浏览器,通常不可能覆盖标准行为。

您需要检测并适当处理重复的表单提交,而不是这种方法:

How to handle multiple submissions server-side

【讨论】:

  • +1 借调。这是一个常见问题,它有不涉及篡改用户 UI 的解决方案。
【解决方案2】:

最好的选择通常是找到一种不涉及篡改浏览器功能的方法。在您的情况下,这将使用户将预订提交到插入条目的页面,然后重定向用户到一个除了显示该条目之外什么都不做的感谢页面。然后,用户将能够多次刷新页面,而不会发生任何危险。

【讨论】:

  • 这不是一个好的解决方案,因为它不处理双击,也不会阻止使用浏览器中的后退按钮。 =/
  • 好吧,我想可以更好地选择示例解决方案,是的,但我的主要观点仍然是您不应该禁用 f5 键(也不应该阻止使用浏览器的后退按钮),但您应该设法以适当的方式处理任何用户行为,而不会创建任何重复的预订。
  • @Emil Vikström:关于双击,您可以使用令牌系统来防止处理多个提交。此外,如果重定向正确完成,后退按钮没有任何区别:表单应该将浏览器发送到处理它的中间脚本,然后立即向浏览器发送Location 标头,重定向到成功页面。如果用户随后返回,他/她将最终出现在表单页面上。
【解决方案3】:

你不能。这是浏览器的编码方式,您无法从网页中禁用它。

您需要重组您的应用程序以识别此类刷新,而不是创建额外的记录。

一种方法是检查是否在几秒钟前为用户输入了一条记录,如果是这种情况,则不要插入新记录。

另一种添加插页式页面的方法,该页面将执行添加然后重定向到您的确认页面(此页面只是一个显示页面,刷新它不会做任何事情)。

【讨论】:

    【解决方案4】:

    我不知道您是否可以禁用 F5 但可以显示某种“您确定”消息。

    这可以使用在窗口重新加载或关闭之前调用的 window.onbeforeunload 来完成。

    【讨论】:

    • 在大多数浏览器中发布后数据的重新加载已经带有警告,所以我猜用户已经选择忽略这个:)
    【解决方案5】:

    他们刷新页面可能有几个原因。 Maye 他们使用了他们的后退按钮,双击您的提交按钮或其他任何加载两次的按钮。

    这里有两个真正解决您问题的方法:

    1) 在表单字段中输入一个随机数,将此数字与预订一起保存,然后检查您的预订表是否已经有具有该值的预订。这将阻止他们发送表单两次。

    2) 保存他们最后一次完成预订的 cookie。检查此值并在五分钟内不允许新的预订。

    【讨论】:

      【解决方案6】:

      另一种方法是将您的用户重定向到感谢页面,从会话中加载 ID。

      这样,当用户点击 F5 时,感谢页面将加载,并且不会再次尝试提交表单。

      如果在加载感谢页面时会话中没有预订 ID,则重定向回主页或合适的错误页面。

      【讨论】:

      • 这不会阻止用户使用浏览器的后退按钮。
      • @Emil - OP 没有询问后退按钮,只询问 F5。处理后退按钮超出了问题的范围,但解决方案可能很容易涉及在会话中检查预订 ID。
      猜你喜欢
      • 2016-12-01
      • 1970-01-01
      • 2010-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多