我有一個使用驗證碼的形式。出於某種原因,當用戶提交此表單時採用了錯誤的重新捕獲值,當頁面重新呈現時,重新捕獲無法呈現。的Recaptcha - 腳本標記注入失敗零星
看起來發生的情況是,重新獲取嘗試注入一個「腳本」標籤,並且偶爾(並且只在某些瀏覽器,某些環境和某些情況下),它沒有添加該「腳本」標記到DOM。
它發生是這樣的:
1)有一些內嵌JavaScript嵌入在像這樣的形式:
https://www.google.com/recaptcha/api/challenge?k=<our public key>
2)該腳本正確執行和返回如下:
var RecaptchaState = {
site : <some value>,
challenge : <challenge key>,
is_incorrect : false,
programming_error : '',
error_message : '',
server : 'https://www.google.com/recaptcha/api/',
timeout : 18000
};
document.write('<scr'+'ipt type="text/javascript" s'+'rc="' + RecaptchaState.server + 'js/recaptcha.js"></scr'+'ipt>');
3)什麼之後通常的情況是,腳本標記注入頁面,recaptcha.js被加載時,它會讀取RecaptchaState撥打電話出去使用recaptcha來渲染圖像。
但是,在某些情況下,出於某種原因,應該添加到2)中的腳本標記永遠不會添加到DOM中,因此從不會加載recaptcha.js,因此從不會呈現該代碼!在頁面呈現完成後,我可以在控制檯中看到「RecaptchaState」存在並且具有正確的值,只是沒有腳本標記可以與它一起使用。
所以,這就是正在發生的事情,我真的很爲難,爲什麼。我只能在Firefox中重現這一點,奇怪的是,它只發生在某些條件下。例如,如果我通過fiddler路由請求,它將每次都工作,永遠不會失敗。如果我在提交請求之前清除了緩存,它將每次都有效。有時候,當我期待它失敗時,它會起作用,反之亦然。所以它非常零星。
所以我的想法是,也許是有事情做與JS加載它與「文件撰寫」語句干擾的時機。也許其他一些JavaScript會干擾它或類似的東西。只是尋找一些一般的想法,我可能會試圖弄清楚,我可以運行的測試,我可以尋找的東西,或任何真正的想法。
在此先感謝
更新
仍然沒有運氣搞清楚了這一點。我以爲有一個想法......我們在螢火蟲控制檯中看不到任何錯誤訊息,表明任何事情都會出錯,儘管顯然是有的。有沒有我們可以用來詳細瞭解Firefox中究竟發生了什麼的公用程序?我正在考慮Chrome的「Speed-Tracer」,它會給你一個非常詳細的事件時間表。這裏唯一的問題是我們無法在Chrome中重現 。
您是否嘗試用'document.createElement'和相關函數替換'document.write'? – Lekensteyn 2011-04-20 13:56:12
不是,那個代碼是從recaptcha發給我們的,所以w真的不能控制它。 – JasonStoltz 2011-04-20 18:04:28