3

jQueryライブラリがロードされたかどうかを検出し、ロードされていない場合は追加して、DOMにロードされた後にフォールバックソリューションとしてスクリプトを開始する方法を知っている人はいますか?

これが私のスクリプトです:

if (typeof jQuery == 'undefined') {
    // if jQuery Library is not loaded
    var script = document.createElement( 'script' );
    script.type = 'text/javascript';
    script.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js';
    document.body.appendChild(script);
    startScript();
} else {
    // cool, jQuery Library is loaded
    startScript();
}

function startScript() {
    $.noConflict();
    jQuery(document).ready(function($){
    .... // my jquery code
    });
}

もちろん、上記はjQueryを正しく追加しますが、スクリプトは追加直後に開始されるため、何もしません。これに関するヒントはありますか?

どんな答えにも感謝します。ありがとう!

4

1 に答える 1

4

あなたが言ったように、新しい要素startScriptを追加した直後に呼び出すことができないことを除いて、あなたは大丈夫です。script代わりに、setTimeoutループを実行します。

// ...
document.body.appendChild(script);
maybeStart();

maybeStartこのように見える場所(の本体内でifはなく、関数宣言はそこでは有効ではありません):

function maybeStart() {
    if (typeof jQuery === "undefined") {
        setTimeout(maybeStart, 100);
    }
    else {
        startScript();
    }
}

jQuery がロードされているかどうかをチェックし、ロードされていない場合は 10 分の 1 秒待ってから再度チェックします。jQuery が見つかると、あなたのstartScript.

そこに時間制限を設定することもできます (jQuery がロードされない場合に備えて、永遠にループしないようにします)。

別の方法として、要素に「ロード」スタイルのイベントをフックすることもできscriptますが、そのメカニズムはブラウザーごとに異なります。一部のブラウザーでloadは、たとえばimg要素と同じです。IE (少なくとも古いバージョン) では、 を使用する必要がreadystatechangeあり、一部のバージョンの IE では両方とも機能します。したがって、フラグを保持して、スクリプトを起動したかどうかなどを確認する必要があります。また、スクリプトが既知のグローバル シンボルを作成することがわかっている場合、上記はそれほど複雑ではありません ( jQueryの場合です)。

于 2012-06-09T07:21:51.810 に答える