2

jQuery を使用した IE9 でのいくつかの ajax の問題。getScript()私は現在、からのページで読み込まれた JavaScript ファイルからjQuery を呼び出します<script>。これにより、一部の JSONP データがwindowオブジェクトにロードされ、関数が実行されて、そのメンバーが<option>の として解析され<select>ます。(これはすべて Chrome と Firefox で正常に動作します。)

ただし、IE9 では、getScriptはまったくコールバックせず (または、明らかに呼び出されることさえありません)、ページを半分ロードされた状態のままにします。getScript()一定の時間が経過した後にユーザークリックで呼び出せるようにしようとした 3 つの関連するsを呼び出す関数もありますがpiGetScripts()、この要素をクリックしても呼び出されません (ただし、alert()内の sは呼び出されます)それ)。

奇妙なことに、IE J​​avaScript コンソールを開いて要素をもう一度クリックすると、呼び出しが成功します。その時点から、後続のページの読み込み ( Ctrl+ R) で、ブラウザーが閉じられるまで、ページは適切に読み込まれます (Chrome や Firefox と同様)。コンソールを開いた状態でページがロードされた場合も、呼び出しは適切に行われます。

誰もこれに遭遇したことがありますか?

このあいまいな動作の理由を発見したいと思います。

4

1 に答える 1

2

私自身のコメントに続いて:

jQueryとは何の関係もありませんでしたが、私はその動作を見てきました。JavaScript からコンソールを呼び出すと、コンソール オブジェクトを初期化し、後で動作する開発者ツールを開かない限り、例外がスローされます。そうかもしれません。コンソールを使用していない場合は、何が起こっているのかわかりません (実際のコード + jQuery のバージョンなど、詳細を教えてください)。幸運を!

どうやら本当にそうだったようです。良い。デバッグについてもう少しアドバイスをしたいと思います。デバッグを処理するための独自のクラスを作成できます (作成する必要があります)。たとえば、これは 1 つのオプションです。

function Debuger() {
    var self = this;
    self.cache = [];

    self.dump = function() {
        if (window.console && window.console.log) {
            var l = self.cache.length;
            for (var i = 0; i < l; i++)
                window.console.log.apply(window.console, self.cache[i]);
            self.cache = [];
            /* We have console, we can deactivate monitor... */
            self.deactivate();
            /* ...and even redefine log! */
            self.log = function() {
                window.console.log.apply(window.console, arguments);
            };
        }
    };

    self.log = function() {
        var args = arguments;
        self.cache.push(args);
        self.dump();
    };

    self.monitor_fn = function() {
        self.dump();
    };

    self.activate = function() {
        self.monitor = setInterval(self.monitor_fn, 1000);
    };

    self.deactivate = function() {
        clearInterval(self.monitor);
        self.monitor = null;
    };
}

次のように使用するだけです。

debuger = new Debuger();
debuger.activate();
debuger.log('Test');

どのブラウザでも動作するはずです (ただし、テストはしていません) console。オブジェクトが作成されると、キャッシュされたメッセージがそれにダンプされます。明らかに、独自のニーズに合わせてカスタマイズする必要があります。

于 2012-06-22T17:23:48.837 に答える