簡體   English   中英

IE6不解析加載的JavaScript文件(由Google托管的Recaptcha)

[英]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.

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