当我的域和子域上的所有资源都被加载时,我需要执行一些脚本,所以我这样做了:
$(window).load(function(){
// al my functions here...
}
问题是有一些外部资源(不在我的域和子域上)有时需要更长时间才能加载。有没有办法从加载事件中排除外部资源?
编辑: 我希望做类似的事情:
$(window).not(".idontcare").load(function()
但它不工作
当我的域和子域上的所有资源都被加载时,我需要执行一些脚本,所以我这样做了:
$(window).load(function(){
// al my functions here...
}
问题是有一些外部资源(不在我的域和子域上)有时需要更长时间才能加载。有没有办法从加载事件中排除外部资源?
编辑: 我希望做类似的事情:
$(window).not(".idontcare").load(function()
但它不工作
我猜你的外部资源依赖于一个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 准备好,外部资源就应该开始加载,而无需等待完整的窗口加载。
我有几乎相同的情况。但就我而言,我想排除所有从另一个站点(例如 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
不幸的是,该window.onload
事件非常严格。正如您可能知道的那样,当所有和所有资源都被传输和加载时,它会触发,图像,iframe,一切。因此,对您的问题的快速回答是否定的,没有易于使用的方法来告诉该事件忽略外部资源,在那里没有区别。
您需要自己处理,根据这些资源的包含和定位方式,这可能是一件棘手的事情。您甚至可能需要在源代码交付之前对其进行操作以完成此操作。
据我所知,脚本标签有一个 async - 标签。您可以包括:
<script src="script_path" async="true"></script>
这将不包括他们参加活动。
也许
$(document).ready(...)
而不是 $(window).load() 会有所帮助吗?
当 HTML 文档被加载并且 DOM 准备就绪时,文档就绪事件已经执行,即使所有的图形还没有加载。