首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jquery:从$(window).load()中排除外部资源

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

Stack Overflow用户
提问于 2012-10-23 10:50:28
回答 5查看 2.3K关注 0票数 4

当加载域和子域上的所有资源时,我需要执行一些脚本,因此我执行了以下操作:

代码语言:javascript
运行
复制
$(window).load(function(){
  // al my functions here...
}

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

编辑:--我希望这样做:

代码语言:javascript
运行
复制
$(window).not(".idontcare").load(function()

但这不起作用

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-10-23 11:15:27

我猜您的外部资源依赖于src属性。

如果是这样的话,在您的页面源代码中,您可以设置您不想等待的资源的src属性,不是src,而是external_src

然后你就可以轻松地做:

代码语言:javascript
运行
复制
$(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准备就绪,外部资源就应该立即开始加载,而无需等待完整的窗口加载。

票数 4
EN

Stack Overflow用户

发布于 2013-02-07 21:31:53

我的案子差不多是一样的。但在我的例子中,我想排除所有从另一个站点加载内容的iframes (例如youtube、vimeo等)。在DOM准备好时,将“src”属性隐藏在所有iframes中,并在窗口完成加载所有其他内容时将其放回原处。

代码语言:javascript
运行
复制
(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。我不知道这是否是最好的方法,但至少在我身边效果很好。

票数 2
EN

Stack Overflow用户

发布于 2012-10-23 10:53:11

不幸的是,window.onload事件非常严格。正如你可能知道的那样,当所有的资源都被转移和装载时,图像,如果,一切都会触发。所以对你的问题的快速回答是否定的,没有容易使用的方法来告诉事件忽略外部资源,这没有什么区别。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13028821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档