4

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

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

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

编辑: 我希望做类似的事情:

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

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

于 2013-02-07T21:31:53.793 回答
0

不幸的是,该window.onload事件非常严格。正如您可能知道的那样,当所有和所有资源都被传输和加载时,它会触发,图像iframe一切。因此,对您的问题的快速回答是否定的,没有易于使用的方法来告诉该事件忽略外部资源,在那里没有区别。

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

于 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 回答