您好,登录后才能下订单哦!
这篇文章主要讲解了“如何使用iframe与window.onload”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用iframe与window.onload”吧!
前言
在项目上,需要等页面加载完之后再执行一个方法用于修改页面的颜色,于是导出都是在使用onload解决,然而这并不能解决我遇到的问题,因为我发现,我项目上的页面仍然没加载,折腾了很久才知道,原来是因为项目使用了很古老的iframe来操作的,必须等iframe加载完之后才能执行方法,原因分析完了,接下来我再说说,传统的,原生JS是如何使用onload的。
网上很常见的方法:
<script type="text/javascript">
window.onload=function(){
document.getElementById("bg").style.backgroundColor="#F00";
}
</script>
解释:window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行。
还有一种写法是:
<body οnlοad="loadBody()">
<div ></div>
<script type="text/javascript">
console.log("load ...... body javascript ");
window.οnlοad=function(){
console.log("load ...... body window javascript ");
}
</script>
</body>
解释:等待body加载完成,就会执行loadBody()方法。在window和dom之后执行,总是最后执行。这里的onload函数会覆盖window.onload
上述内容并不能解决我的问题,于是我去查我不是很想用的jQuery的方法:$(document).ready,想着能不能用原生JS实现该方法:
function ready(fn){
if(document.addEventListener){ //标准浏览器
document.addEventListener('DOMContentLoaded',function(){
//注销时间,避免重复触发
document.removeEventListener('DOMContentLoaded',arguments.callee,false);
fn(); //运行函数
},false);
}else if(document.attachEvent){ //IE浏览器
document.attachEvent('onreadystatechange',function(){
if(document.readyState=='complete'){
document.detachEvent('onreadystatechange',arguments.callee);
fn(); //函数运行
}
});
}
}
但是我发现我的项目上并没有任何变化,依然不能用在项目上,这我就发愁了,我突然想到,项目上用的iframe于是就去搜了一下。
什么是iframe
HTML内联框架元素 (<iframe>) 表示嵌套的browsing context。它能够将另一个HTML页面嵌入到当前页面中。每个嵌入的浏览上下文(embedded browsing context)都有自己的会话历史记录(session history)和DOM树。包含嵌入内容的浏览上下文称为父级浏览上下文。顶级浏览上下文(没有父级)通常是由 Window 对象表示的浏览器窗口。
iframe 的页面和父页面(parent)是分开的,所以它意味着,这是一个独立的区域,不受 parent 的 CSS 或者全局的 JavaScript 的影响。
主要优势:
(1)网页编辑器(WYSIWYG Online HTML Editor),因为它们需要 reset 自己的 CSS 到自己的标准,而不被 parent CSS 的 override。
(2)沙箱隔离。
(3)需要保持独立焦点和历史管理的子窗口,如复杂的Web应用。
缺点:
(1)样式/脚本需要额外链入,会增加请求。
(2)iframe好在能够把原先的网页全部原封不动显示下来,但是如果用在首页,是搜索引擎最讨厌的。
(3)iframe的创建比其它包括scripts和css的 DOM 元素的创建慢了 1-2 个数量级。
(4)iframe会阻塞主页面的Onload事件
好了,说了这么多利弊,还是需要看具体项目来解决项目上的问题,那么怎么解决onload呢?
// 页面加载时判断frameObj是否加载
window.onload = function(){
var frameObj= document.getElementById("frameID");
// 如果已加载则执行方法
if (frameObj.attachEvent){// IE
frameObj.attachEvent("onload", function(){
yourfunction();
});
}else {
// 非IE
frameObj.onload = function(){
yourfunction();
};
}};
这段代码有两点比较重要,首先是需要使用window.onload并且你需要知道attachEvent方法
写了这么久的代码,还是把IE放在了考虑范围内,毕竟是Windws 内核,不想删掉就隐藏吧,最近在写前端代码的时候,发现如果项目本来没有使用jQuery,就一直不使用jQuery,代码比较整洁,而且加上新出的vue、react都有自己不错的封装思路,于是我写习惯了$这个dollar符终于可以不用了。
感谢各位的阅读,以上就是“如何使用iframe与window.onload”的内容了,经过本文的学习后,相信大家对如何使用iframe与window.onload这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。