Safari可以在模式对话框中显示ReCaptcha吗



我正试图在模态(jquery)对话框中显示ReCaptcha。我在blockUI、SimpelModal和ThickBox上都试过。它们中的每一个都能在Firefox中完美运行,而在Safari中则不然(尚未测试Chrome)。

当对话框打开时,Safari突然决定只显示ReCaptcha。

我怀疑这要么是Webkit中的错误,要么是ReCaptcha中的错误。但我不明白是什么让Safari这样对待ReCaptcha。或者是ReCaptcha javascript搞砸了它?这对我来说完全是个谜。

我很想听听关于变通办法的任何想法。

编辑:一个额外的细节:一旦Safari只显示ReCaptcha,页面的标题仍然是原始页面的标题。来源仍然是原始来源。甚至DOM树看起来也不错。然而,它只显示了ReCaptcha。

如果我用另一个iframe替换repatcha,一切都会很好。在没有模式对话框的情况下在页面中显示摘要也可以。因此,真正造成问题的是Safari+ReCaptcha+jQuery弹出窗口的组合。

编辑:我刚刚注意到ReCaptcha只在禁用Javascript时使用iframe。所以我的iframe测试无关紧要。ReCaptcha javascript(来自谷歌,所以你会期望有不错的跨浏览器功能)、jQuery(通常擅长跨浏览器的东西)和Safari(与谷歌Chrome相关的Webkit)之间必须不兼容。

为什么这种特定的组合会失败得如此严重,这仍然是一个完全的谜。

这是我的解决方案:

$('#captcha-form script').remove();

"captcha-form"是包含captcha的表单的id。删除脚本标记,这样当jQuery移动脚本后Safari重新渲染脚本时,脚本就不会再次执行。脚本创建的事件处理程序不在脚本标记中,因此它们仍然存在。

适用于Safari和Firefox 4。我现在要在其他一些浏览器中测试它。

我遇到了同样的问题,并在包含captcha的模态div打开后使用Recaptcha-ajax API创建captcha来解决这个问题:http://code.google.com/apis/recaptcha/docs/display.html

$("#EmailSignupModal").dialog('open');
//only call create the first time the dialog is opened.
if ($("#recaptcha_area").length == 0){
   Recaptcha.create("--public key--", "EmailCaptchaContainer", {
      theme: "clean",
      callback: Recaptcha.focus_response_field
   });
}

最新更新