【问题标题】:Reload recaptcha on browser back button在浏览器后退按钮上重新加载验证码
【发布时间】:2013-01-10 22:30:56
【问题描述】:

我已经尝试了多种方法来在回页时重新加载图像,但无论我尝试什么,我都会得到相同的图像。一些方法很接近(我可以看到图像刷新,但recaptcha 服务器响应并重新出现之前的图像)。单击后退按钮时是否有一些技巧可以让图像重新加载?我不希望我的用户在输入错误的安全词时必须重新输入所有表单信息。我还想避免存储所有信息。该页面是经典的 asp,因此 jquery 或 ajax 方法将是要走的路线,或者 id 假设。提前致谢。

【问题讨论】:

    标签: jquery reload recaptcha back


    【解决方案1】:

    我想出了一个快速破解方法来解决这个问题。在带有recaptcha 的页面上添加以下jquery

    <script>
    $(document).ready(function(){
      $("#form_div").Show();
    );
    </script>
    

    只需将“#form_div”替换为包含您的表单的任何 div。现在,当用户点击后退按钮时,它会刷新 recaptcha 图像。从任何意义上来说,这都是一种 hack,但它对我有用。

    【讨论】:

      【解决方案2】:

      window.onload 调用您的刷新方法:

      window.onload = function(){ /* refresh here */ }
      

      【讨论】:

      • 测试这个:window.onload = function(){ alert(1); }。回页时应该会看到警报。
      • 我在回页时确实得到了警报窗口,但是他们的服务器响应较晚,所以当我使用重新加载方法时,他们的服务器会覆盖我的方法
      • 好的...也许这对你有用:window.onload = function(){ setTimeout(function(){ Recaptcha.reload(); },1000); }.
      • 它确实会重新加载,但一旦超时结束,就会恢复到原始图像。
      • 感谢您的尝试,非常感谢您抽出宝贵时间提供帮助。
      【解决方案3】:

      编辑:删除历史 API 答案以显示可能的 AJAX 答案。

      使用 jQuery 非常简单。

      $(window).on('load',function(){
          $('#RecaptchaContainer').load('/path/to/recaptcha.php',function(){
               // any javascript you need to perform on the recaptcha
          });
      });
      

      您可以在该文件中包含所有的recaptcha HTML,但您可以在该回调函数中包含所有的javascript。

      【讨论】:

      • 我看到的唯一问题是我在表单上的所有用户输入都将被清除,除非我误解了这些事件。我知道我可以存储这些信息,但我希望让事情变得更隐蔽。
      • 好吧,使用 AJAX 加载您的验证码。这将是一个不同的 AJAX 调用,因此应该作为新的调用。
      • 这听起来会奏效。我没有使用过 AJAX,所以我可能需要一段时间才能回复确认。
      • 我最终找到了一个超级简单的 hack 来解决这个问题。我将它添加到我的问题的末尾,因为我无法在另外 5 个小时内回答我自己的问题。不过,我感谢您的帮助,一旦我有足够的信誉,我会投票赞成。
      【解决方案4】:

      这是适用于 Chrome 的简单方法:

      在 HTML body 上添加 reload 功能如下:

      <body onload="javascript:Recaptcha.reload()">
      

      当用户单击返回按钮时,reCaptcha 图像会在 Chrome 中自动重新加载。

      【讨论】:

        【解决方案5】:

        通过使用这行代码,我设法让它正确刷新:

        body onLoad="javascript:Recaptcha.reload()"
        

        但是这种方法不是一个好的解决方案,因为焦点设置在 recaptacha 文本字段上,这意味着窗口向下滚动到页面底部,即 recaptacha 字段所在的位置,即使您是第一次进入页面时间(不仅在按“返回”到页面时)。 此解决方案有效,但最好找到一个不将焦点设置在 recaptacha 输入字段上的解决方案。

        【讨论】:

        • 好的,解决了!非常感谢我的朋友 Rubén Ayala。正确的方法是: body onLoad="javascript:Recaptcha.reload('t')" 这使它正确重新加载,但不会将焦点发送到页面底部。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-07
        • 2012-02-21
        • 2023-03-23
        • 2018-03-29
        • 2019-03-04
        • 1970-01-01
        • 2018-09-26
        相关资源
        最近更新 更多