我需要在加载域和子域上的所有资源时执行一些脚本,所以我这样做了:
$(window).load(function(){
// al my functions here...
}
问题是有些外部资源(不在我的域和子域上)有时需要更长时间才能加载。有没有办法从load事件中排除外部资源?
修改 我希望能做到这样的事情:
$(window).not(".idontcare").load(function()
但它不起作用
答案 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准备就绪时已经执行,即使所有图形尚未加载。