[英]IE6 does not parse the loaded JavaScript file (Recaptcha hosted by Google)
這是一個非常奇怪的問題,我試圖在網站上使用Recaptcha,它適用於除IE6之外的所有測試瀏覽器。
我已經參考了谷歌的js: http : //www.google.com/recaptcha/api/challenge? k = the_key,它是根據fiddler2和'onreadystatechange'事件加載的(有一個readystate =='裝載“)
正常的工作流程應該是已經解析的已加載的JS,並且已經請求了另外的js,然后是從谷歌加載的圖像。 我的問題是第一個加載的JS文件(內容類似於下面):
var RecaptchaState = {
site : 'xxxxxxxxxxxx',
challenge : 'xxxxxxxxxxxxxxxxxxxxxxxxx',
is_incorrect : false,
programming_error : '',
error_message : '',
server : 'http://www.google.com/recaptcha/api/',
timeout : 18000
};
document.write('<scr'+'ipt type="text/javascript" s'+'rc="' + RecaptchaState.server + 'js/recaptcha.js"></scr'+'ipt>');
沒有被解析。 首先,以下JS測試:
typeof RecaptchaState == 'undefined'
其次,沒有第二個腳本請求(根據fiddler2),更不用說recaptcha圖像......
在recaptcha標記之后,腳本標記被放入體內,我甚至嘗試動態加載JS:
function GetJavaScript(url, callback) {
var script = document.createElement('script');
script.src = url;
var head = document.getElementsByTagName('head')[0];
var done = false;
// Attach handlers for all browsers
script.onload = script.onreadystatechange = function () {
if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) {
done = true;
callback();
// remove the hanlder
script.onload = script.onreadystatechange = null;
head.removeChild(script);
}
};
head.appendChild(script);
}
它給出了相同的行為......最讓我困惑的是:只有當頁面從另一個頁面重定向時才會偶爾出現此問題。 (直接在新瀏覽器窗口中打開url或刷新頁面總是正常工作,但是使用JavaScript刷新頁面不起作用...)
請幫助,任何建議和/或想法將不勝感激......
仔細檢查你的腳本在頁面源中的src是不是api.recaptcha.net(有些庫使用它,我知道我正在使用的Java)。 如果是,則會轉發到www.google.com/recaptcha/api,這似乎會導致IE6出現問題。 一旦我切換到使用www.google.com/recaptcha/api作為實際腳本src,IE6就完全開心了。 祝好運!
我使用https調用解決了這個問題,根據reCaptcha的Google Group中的這個主題。
這不是解決方案,只是一種解決方法。
請求服務器站點上的第一個js文件: http : //www.google.com/recaptcha/api/challenge? k = the_key,並直接在頁面上注入腳本的第一部分:
var RecaptchaState = {
site : 'xxxxxxxxxxxx',
challenge : 'xxxxxxxxxxxxxxxxxxxxxxxxx',
is_incorrect : false,
programming_error : '',
error_message : '',
server : 'http://www.google.com/recaptcha/api/',
timeout : 18000
};
然后,使用GetJavaScript函數和/或JQuery.getScript()函數加載第二個腳本: http : //www.google.com/recaptcha/api/js/recaptcha.js
這個解決方案適用於基於我測試的IE6,為了減輕服務器負載,我在服務器端和客戶端檢測用戶的瀏覽器以注入不同的邏輯。
我知道這是一個骯臟的解決方法,以防這可能對某人有所幫助。
不是答案(或者是嗎?):fo_Ok ie6。 說真的,算了吧。 沒有這種態度,ie6將永遠存在。 它就像古代的邪靈一樣,直到有人相信它才會活着。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.