簡體   English   中英

Recaptcha - 腳本標簽注入偶爾失敗

[英]Recaptcha - Script tag injection failing sporadically

我有一個使用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,因此從不呈現recaptcha! 在頁面呈現后,我可以在控制台中看到“RecaptchaState”存在且具有正確的值,只是沒有腳本標記。

所以這就是正在發生的事情,我真的很難過為什么。 我只能在Firefox中重現這一點,奇怪的是,它只在某些條件下發生。 例如,如果我通過fiddler路由請求,它每次都會工作,永遠不會失敗。 如果我在提交請求之前清除緩存,它將每次都有效。 有時,當我期待它失敗時,它會起作用,反之亦然。 所以這是非常零星的。

所以我的想法是,它可能與js加載的時間有關,這會干擾“document.write”語句。 也許其他一些javascript正在干擾它或類似的東西。 只是尋找一些關於如何嘗試解決這個問題的一般性想法,我可以運行的測試,我可以尋找的東西,或任何真實的想法。

提前致謝

更新

仍然沒有運氣搞清楚這一點。 有人以為我有......我們在firebug控制台中看不到任何錯誤消息,表明任何事情都會出錯,盡管事情顯而易見。 我們可以使用任何實用程序來仔細查看Firefox中究竟發生了什么嗎? 我正在考慮像Chrome的“Speed-Tracer”這樣的東西,它為您提供非常詳細的活動時間表。 這里唯一的問題是我們無法在Chrome中重現它。

事實證明,我們還通過名為Ensighten的標簽管理服務包含了一些腳本。 其中一個腳本暫時支持“document.write”函數並將其更改為調用另一個函數。 但是,他們在發生其他一些事情之后設置了一個回調方法,這會將“document.write”函數重置為通常的狀態。

但是,如果腳本評估的時間發生恰到好處,以便在document.write函數處於其更改狀態時評估我們的recaptcha javascript ...它未能將我們后續的recaptcha js注入頁面。

話雖這么說,似乎可以認為可以通過這種方式修改documnet.write的強制代碼,特別是對於第三方js文件。 所以我問他們是否有他們可以避免在他們的代碼中這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM