【发布时间】:2010-10-31 17:23:06
【问题描述】:
我知道onload 事件在触发之前等待页面资源加载 - 图片、样式表等。
但这是否包括页面内的 IFrame?换句话说,是否保证所有子框架的onloads 总是在父框架之前触发?
另外,如果浏览器之间的行为不同,请告诉我。
【问题讨论】:
标签: html dom browser iframe onload
我知道onload 事件在触发之前等待页面资源加载 - 图片、样式表等。
但这是否包括页面内的 IFrame?换句话说,是否保证所有子框架的onloads 总是在父框架之前触发?
另外,如果浏览器之间的行为不同,请告诉我。
【问题讨论】:
标签: html dom browser iframe onload
正如我在页面上看到的那样,每个 iframe 都有独立的 onload,并且 top-frame onload 不会等待 iframe 触发。
我的网站上有 gif/png 横幅,有时加载速度很慢,所以我将它们放入 iframe 中,这样可以加快整个网站和 onload 事件的工作速度。
【讨论】:
不,它没有。如果你想做这样的事情,你需要为 iframe 添加一个 onload 处理程序。你可以用 jQuery 很好地做到这一点:
<iframe src="http://digg.com"></iframe>
<script>
var count = $('iframe').length;
$(function() {
// alert('loaded'); // will show you when the regular body loads
$('iframe').load(function() {
count--;
if (count == 0)
alert('all frames loaded');
});
});
</script>
这会在所有帧都加载完毕时发出警报。
看例子:
【讨论】:
或者普通的javascript应该可以工作..
function checkIframes() {
if(!i) { i = 0; }
if(document.getElementsByTagName('iframe')[i]) {
document.getElementsByTagName('iframe')[i].onload = function () { i++; checkIframes(); }
}
else { yourFunctionInHere(); }
}
还没有真正测试过这个,但应该可以工作......而不是使用document.onload = function() { checkIframes(); }参考它
我不太喜欢 jQuery 之类的库,因为到目前为止,我发现我可以用更少的代码和常规的 javascript 实现更多目标。
【讨论】:
setTimeout 以避免堆栈溢出。