15

私は IFRAME で QUnit テストを行っており、QUnit を開始する前に、すべてのスクリプトを親ページから IFRAME にロードする再帰的な JavaScript 関数があります。これはうまくいきます。私の問題は、一部のスクリプトが document.ready を使用して作業を開始することです。

次のようなもの:

$(document).ready(function () {
    // blah
});

彼らの仕事をするために。テストを説明するためだけに運用コードを変更したくないし、すべてのスクリプトが読み込まれるまで IFRAME ドキュメントが「準備完了」であるとこれらの運用スクリプトに認識させたくありません。

「document.ready」自体を遅らせるにはどうすればよいですか?

これが私の疑似コードで、作業の例を示します。

scripts[0] = "/foo/bar.js";
scripts[1] = "/blah/blah.js";

function RecursiveScriptStart(){
    // I want to set document.ready = false right here!
    if(scripts.length == 0) {
        QUnitStart();
        return;
    }
    RecursiveScriptLoader(0, scripts);
}

function RecursiveScriptLoader(currentScriptID, scripts) {
    $.getScript(scripts[currentScriptID], function () {
        if (currentScriptID == (scripts.length - 1)) {
            QUnitStart();
        }
        else {
            RecursiveScriptLoader(currentScriptID + 1, scripts);
        }
    });
}


function QUnitStart() {
        // I want to set document.ready = true right here!
        QUnit.stop();
        QUnit.start();
}

scripts[]実際のコードは似ていますが、配列 " " に JavaScript タグ "src" プロパティを設定する jquery セレクターが含まれます。

ありがとう!

4

5 に答える 5

23

jQuery 1.6+ を使用している場合は、holdReady. スクリプトの先頭に設定$.holdReady(true)し、次に set の先頭にQUnitStart設定し$.holdReady(false)ます。

于 2011-05-16T20:47:46.187 に答える
5

このコードはうまくいきました。$(window).load()内部で呼び出す$(document).ready()

$(document).ready(function() {
    $(window).load(function() {
        // this code will run after all other $(document).ready() scripts
        // have completely finished, AND all page elements are fully loaded.
    });
});

このメソッドは、すべてのスクリプトが完了する$(window).load()まで最後に実行するコードが渡されないようにすることで、すべてのケースで実行順序を保持します。$(document).ready()

于 2016-08-10T20:46:00.103 に答える
4

jQuery 1.6 以降を使用holdReadyしている場合は、ready イベントの発生を遅らせるために使用できます。

1.4.3 以降では、$.readyWait プロパティを使用して準備完了イベントを遅らせることができます。デモはこちら(私のコードではありません)

jqueryがreadyイベントをどのように処理するかを知りたい場合は、次の行を検索してください

jQuery( document ).trigger( "ready" ).unbind( "ready" );

jquery.js の開発者コピーで

于 2011-05-16T20:49:12.183 に答える
0

他の人が中断したところを埋めるために、test.html でこのロード順序を使用できます。

<script src="jquery.js"></script>
<script src="qunit.js"></script>
<script>$.holdReady(true);</script>
<script src="theThingIwantToTest.js"></script>
<script src="theTestScript.js"></script>
于 2012-10-03T15:33:45.603 に答える