4

ドメインとサブドメインのすべてのリソースが読み込まれたときに、いくつかのスクリプトを実行する必要があるため、次のようにしました。

$(window).load(function(){
  // al my functions here...
}

問題は、ロードに時間がかかる場合がある外部リソース (私のドメインとサブドメイン以外) があることです。load イベントから外部リソースを除外する方法はありますか?

編集: 私は次のようなことを望んでいました:

$(window).not(".idontcare").load(function()

しかし、それは機能していません

4

5 に答える 5

4

srcあなたの外部リソースは属性に依存していると思います。

もしそうなら、あなたのページのソースコードで、あなたがsrc待ちたくないリソースの属性を、としてではなく、としてsrc設定することができますexternal_src

次に、簡単に行うことができます。

$(document).ready(function(){

    $(window).load(function(){
        // all your functions here...
    });

    $('[external_src]').each(function() {

        var external_src = $(this).attr("external_src");

        $(this).attr("src", external_src); // now it starts to load
        $(this).removeAttr("external_src"); // keep your DOM clean

        //Or just one line:
        //$(this).attr("src", $(this).attr("external_src")).removeAttr("external_src");

    });

});

このようにして、ウィンドウ全体のロードを待たずに、DOMの準備が整うとすぐに外部リソースのロードを開始する必要があります。

于 2012-10-23T11:15:27.700 に答える
2

私もほぼ同じケースです。しかし、私の場合、別のサイト (youtube、vimeo など) からコンテンツをロードするすべての iframe を除外したいと考えています。回避策が見つかったので、シナリオは、DOM の準備ができたらすべての iframe から 'src' 属性を非表示にし、ウィンドウが他のすべてのコンテンツの読み込みを終了したら元に戻すことです。

(function($){
    //DOM is ready
    $(document).ready(function(){
        var frame = $('iframe'),
            frameSrc = new Array();

        if( frame.length ){
            $.each( frame, function(i, f){
                frameSrc[i] = $(f).attr('src');
                //remove the src attribute so window will ignore these iframes
                $(f).attr('src', '');
            });

            //window finish load
            $(window).on('load',function(){
                $.each( frame, function(a, x){
                    //put the src attribute value back
                    $(x).attr('src', frameSrc[a]);
                });
            });
        }
    });
})(jQuery);

特別なクラスを追加することで外部リソースをロードするサイト内のすべての要素をマークし、iframe を$('.special_class')またはそのようなもので変更できます。これが最善の方法かどうかはわかりませんが、少なくとも私の側ではうまく機能します:D

于 2013-02-07T21:31:53.793 に答える
0

残念ながら、window.onloadイベントは非常に厳しいです。ご存じかもしれませんが、imagesiframesすべてのリソースが転送およびロードされたときに起動します。したがって、あなたの質問に対する簡単な答えはノーです。そのイベントに外部リソースを無視するように指示する使いやすい方法はありません。違いはありません。

自分で処理する必要がありますが、これらのリソースがどのように含まれ、配置されているかによっては、扱いにくいものになる可能性があります。それを達成するために、配信される前にソース コードを操作する必要さえあるかもしれません。

于 2012-10-23T10:53:11.733 に答える
0

私の知る限り、スクリプトタグには async - タグがあります。次の目的で含めることができます。

<script src="script_path" async="true"></script>

これにより、それらはイベントに含まれません。

于 2012-10-23T10:53:13.583 に答える
0

多分

$(document).ready(...)

$(window).load() の代わりに役立ちますか?

すべてのグラフィックスがまだロードされていなくても、HTML ドキュメントがロードされ、DOM の準備が整った時点で、ドキュメントの準備完了イベントがすでに実行されます。

于 2012-10-23T10:53:35.680 に答える