当加载域和子域上的所有资源时,我需要执行一些脚本,因此我执行了以下操作:
$(window).load(function(){
// al my functions here...
}问题是有些外部资源(不是在我的域和子域上)有时需要更长的时间来加载。是否有从load事件中排除外部资源的方法?
编辑:--我希望这样做:
$(window).not(".idontcare").load(function()但这不起作用
发布于 2012-10-23 11:15:27
我猜您的外部资源依赖于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准备就绪,外部资源就应该立即开始加载,而无需等待完整的窗口加载。
发布于 2013-02-07 21:31:53
我的案子差不多是一样的。但在我的例子中,我想排除所有从另一个站点加载内容的iframes (例如youtube、vimeo等)。在DOM准备好时,将“src”属性隐藏在所有iframes中,并在窗口完成加载所有其他内容时将其放回原处。
(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。我不知道这是否是最好的方法,但至少在我身边效果很好。
发布于 2012-10-23 10:53:11
不幸的是,window.onload事件非常严格。正如你可能知道的那样,当所有的资源都被转移和装载时,图像,如果,一切都会触发。所以对你的问题的快速回答是否定的,没有容易使用的方法来告诉事件忽略外部资源,这没有什么区别。
您需要自己处理这个问题,根据这些资源是如何包含和定位的,这可能是一件棘手的事情。您甚至可能需要在源代码交付之前对其进行操作。
https://stackoverflow.com/questions/13028821
复制相似问题