免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 17564 | 回复: 2
打印 上一主题 下一主题

解决动态创建的iframe的onload事件问题的方法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-02-18 14:12 |只看该作者 |倒序浏览
今天写代码时,需要创建一个iframe,并且给他的onload事件定义function,遇到了问题,在google搜了一下没有好的解决办法,下面把解决办法贴出来:

--------------------------------------------------------------------------------------
从我的blog贴过来的,原文:http://asers.blog.sohu.com/79448433.html
--------------------------------------------------------------------------------------

目前的ajax技术还不能支持文件上传(仅仅用于IE的方式就不能算作有了),因此很多时候,在文件上传的时候需要使用iframe,更多的时候都是通过document.createElement来创建。看下面的代码:

var ifr = document.createElement('iframe');

ifr.onload = function() { alert('ok'); }

with(ifr){

style.width = "200px";

style.height = "200px";

src = http://www.baidu.com;

}

document.body.appendChild(ifr);

这个时候,在firefox下面可以看到弹出的Alert信息,但是Ie却没有任何反应,原因分析来分析去还是没有非常好的解释。有一个比较折中的办法是通过修改函数来动态的修改在页面中静态创建的iframe的onload事件:

<html>...<body>

<iframe id="ifr" width="200px" height="200px" src="about:blank" onload="test()"></iframe>

<p><a href="#" onclick="go()">test</a></p>

</body></html>

<script>

var test = function() {}

function go() {

test = function() { alert('ok');}

document.getElementById('ifr').src = http://www.baidu.com;

}

</script>

在IE中测试可以知道,并非iframe不支持onload事件,而是对动态创建和修改的onload事件函数没有反应,那么折中的就是给onload事先绑定一个空函数,在需要时,去修改这个函数的值。(js的函数其实就是存储了一段代码的变量而已)。那么这样可以达到修改onload的效果。

一个我自己也不十分明确的说法是,ie在检测到iframe的时候,似乎就把他的状态设为完成了,通过createElement创建的iframe,似乎在创建的一瞬间他的onload就完成了,后面的onload设定大概也就无效了,既然如此可以跳过这个步骤,不使用createElement创建iframe,逃过IE的检测。看下面的代码:

var myifr = document.createElement('div');

myifr.innerHTML = '<iframe id="myifr" src = http://www.baidu.com width="200px" height="200px" onload="test()"></iframe>';

document.body.appendChild(myifr);

测试成功,函数被执行了。今天碰到这个问题,在网上搜了好久没有很好的解决办法,现在把自己的办法贴出来。这些方式在 IE / Firefox / Opera 中测试通过。

论坛徽章:
0
2 [报告]
发表于 2008-12-21 15:46 |只看该作者
刚好遇到这个问题,baidu回来了.. 哈哈. 谢谢分享

论坛徽章:
0
3 [报告]
发表于 2008-12-21 17:26 |只看该作者
IE很BT
动态添加的函数不执行
比如使用attachEvent附加的事件处理函数
后来只好静态写在代码里了
没想到lz的函数替换方法
佩服
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP