忘记密码   免费注册 查看新帖 | 论坛精华区
ChinaUnix.net
  平台论坛 博客 微博 读书 人才 精华 文库 自测 | 频道操作系统 开发 数据库 存储 服务器 网络 IT新闻 Linux 下载 Power用户组
最近访问板块 发新帖
查看: 6177 | 回复: 2

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

Rank: 1

帖子
240
主题
30
精华
1
可用积分
657
专家积分
5
在线时间
10 小时
注册时间
2004-06-08
最后登录
2010-03-04
论坛徽章:
0
发表于 2008-02-18 14:12:31 |显示全部楼层
今天写代码时,需要创建一个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 中测试通过。

Rank: 1

帖子
682
主题
130
精华
0
可用积分
506
专家积分
0
在线时间
64 小时
注册时间
2003-09-23
最后登录
2010-10-13
论坛徽章:
0
发表于 2008-12-21 15:46:55 |显示全部楼层
刚好遇到这个问题,baidu回来了.. 哈哈. 谢谢分享

Rank: 1

帖子
318
主题
65
精华
0
可用积分
572
专家积分
0
在线时间
31 小时
注册时间
2008-06-28
最后登录
2011-11-20
论坛徽章:
0
发表于 2008-12-21 17:26:40 |显示全部楼层
IE很BT
动态添加的函数不执行
比如使用attachEvent附加的事件处理函数
后来只好静态写在代码里了
没想到lz的函数替换方法
佩服
谢谢分享
您需要登录后才可以回帖 登录 | 注册

北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP