jquery:从$(window).load()中排除外部资源

时间:2012-10-23 10:50:28

标签: javascript jquery

我需要在加载域和子域上的所有资源时执行一些脚本,所以我这样做了:

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

问题是有些外部资源(不在我的域和子域上)有时需要更长时间才能加载。有没有办法从load事件中排除外部资源?

修改 我希望能做到这样的事情:

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

但它不起作用

5 个答案:

答案 0 :(得分: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准备就绪,外部资源就应该开始加载,而不必等待整个窗口加载。

答案 1 :(得分:2)

我几乎有同样的情况。但在我的情况下,我想排除所有从其他网站加载内容的iframe(例如youtube,vimeo等)。找到了一个解决方案,所以这个场景是hide' src'当DOM准备就绪时来自所有iframe的属性,当窗口完成后将其放回所有其他内容。

(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);

您可以通过添加特殊类来标记网站中加载外部资源的所有元素,并使用$('.special_class')或类似内容更改iframe。我不知道这是不是最好的方法,但至少它在我身边很有效:D

答案 2 :(得分:0)

不幸的是,window.onload事件非常严格。您可能知道,当所有资源都被转移和加载时,它会触发, images iframes 所有。所以对你的问题的快速回答是否定的,没有简单易用的方法来告诉该事件忽略外部资源,这在那里没有区别。

您需要自己处理,根据这些资源的包含和定位方式,这可能是一件棘手的事情。您甚至可能需要在交付源代码之前对其进行操作以实现该目标。

答案 3 :(得分:0)

据我所知,脚本标记有一个async-tag。你可以包括:

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

这不包括他们参加活动。

答案 4 :(得分:0)

也许

$(document).ready(...)

而不是$(窗口).load()会有帮助吗?

文档就绪事件在加载HTML文档并且DOM准备就绪时已经执行,即使所有图形尚未加载。