2011-06-10 126 views
2

我試圖在模式(jquery)對話框中顯示ReCaptcha。我嘗試過使用blockUI,SimpelModal和ThickBox。對於其中的每一個,它都可以在Firefox中完美運行,而在Safari中完全沒有(尚未測試過Chrome)。Safari可以在模態對話框中顯示ReCaptcha嗎?

當對話框打開時,Safari會突然決定只顯示ReCaptcha。

我懷疑這是Webkit中的錯誤還是ReCaptcha中的錯誤。但我不明白Safari會如何處理ReCaptcha。或者它是ReCaptcha JavaScript與它混淆?對我來說這完全是個謎。

我很想聽聽任何有關解決方法的建議。

編輯:一個額外的細節:一旦Safari只顯示ReCaptcha,頁面的標題仍然是原始頁面的標題。來源仍然是原始來源。即使是DOM樹看起來也不錯。但它只顯示ReCaptcha。

如果我用另一個iframe替換了recaptcha,一切都顯示正常。在沒有模式對話框的情況下在頁面中顯示recaptcha也可以正常工作。所以它確實是導致問題的Safari + ReCaptcha + jQuery彈出窗口的組合。

編輯:我剛剛注意到ReCaptcha只在Javacript被禁用時才使用iframe。所以我的iframe測試是無關緊要的。它必須是ReCaptcha javascript(來自Google,所以你期望體面的跨瀏覽器能力),jQuery(通常擅長跨瀏覽器的東西)和Safari(與Google的Chrome相關的Webkit)之間的不兼容。

爲什麼這個特定的組合會失敗,這仍然是一個完全的謎。

回答

1

這裏是我的解決方案:

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

'的captcha形式' 是包含驗證碼形式的ID。刪除腳本標籤,以便在jQuery移動它們時Safari重新渲染它們時,腳本不會再次執行。腳本創建的事件處理程序不在腳本標記中,因此它們可以存活。

適用於Safari和Firefox 4.我現在要在其他一些瀏覽器中測試此功能。

+1

只是測試和工程:修復了Safari和沒有按」 (4),Chrome,IE(8)和Opera(11)。 – 2011-08-10 13:23:39

0

我有同樣的問題,並通過使用的ReCaptcha AJAX API來創建一個包含它已經打開了模態的div後的驗證碼解決它: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 
    }); 
} 
相關問題