3

これは本当に奇妙な問題です。私はWebサイトの1つでRecaptchaを使用しようとしています。これは、IE6を除くテスト済みのすべてのブラウザーで機能します。

私はグーグルのjsを参照しました: http ://www.google.com/recaptcha/api/challenge? k = the_keyそしてそれはfiddler2と'onreadystatechange'イベント(readystate =='を持つ)に従ってロードされますロード済み')

通常のワークフローでは、読み込まれたJSが解析され、別のjsがリクエストされてから、画像がgoogleから読み込まれます。私の問題は、最初にロードされた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によると)2番目のスクリプト要求はありません。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を使用したページの更新は機能しません...)

助けてください、アドバイスやアイデアをいただければ幸いです...

4

4 に答える 4

1

reCaptcha の Google グループのこのスレッドに従って、https 呼び出しを使用してこの問題を解決しました。

于 2011-06-08T21:26:08.667 に答える
1

ページ ソース内のスクリプトの src が api.recaptcha.net ではないことを再確認してください (一部のライブラリではそれが使用されていますが、私が使用していた Java の src が使用していたことはわかっています)。そうである場合、それは www.google.com/recaptcha/api に転送され、IE6 で問題が発生するようです。実際のスクリプト src として www.google.com/recaptcha/api の使用に切り替えると、IE6 は完全に満足しました。幸運を!

于 2010-10-29T20:11:10.273 に答える
0

これは解決策ではなく、単なる回避策です。

最初の 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() 関数を使用して、2 番目のスクリプトをロードします: http://www.google.com/recaptcha/api/js/recaptcha.js

このソリューションは、私のテストに基づいてIE6で機能し、サーバーの負荷を軽減するために、サーバー側とクライアント側でユーザーのブラウザーを検出して、さまざまなロジックを挿入します。

これが誰かを助けるかもしれない場合に備えて、これは汚い回避策であることを知っています。

于 2010-07-21T15:30:06.410 に答える
-1

答えない(またはそうですか?):fo_Okie6。真剣に、それを忘れてください。この態度がなければ、ie6は永遠に生きます。それは誰かがそれを信じるまで生き続ける古代の悪霊のようなものです。

于 2010-07-21T10:31:59.807 に答える