`

关于iFrame动态创建函数

 
阅读更多
    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 中测试通过。
分享到:
评论

相关推荐

    PHP+iframe模拟Ajax上传文件功能示例

    本文实例讲述了PHP+iframe模拟Ajax上传文件功能。...页面中有一个表单,表单中有一个上传文件按钮和提交按钮,点击提交按钮执行ajaxUpload函数,然后动态创建iframe标签,让其不可见,最后设置表单

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    +修正动态创建Grid列的BUG(feedback:gxpan)。 -增加示例(data/grid_dynamic_columns.aspx)。 -修正Form不能自适应浏览器大小的改变(feedback:kaywood)(WorkItem#6309)。 -增加重载方法Alert.Show(message, ...

    ExtAspNet_v2.3.2_dll

    +修正动态创建Grid列的BUG(feedback:gxpan)。 -增加示例(data/grid_dynamic_columns.aspx)。 -修正Form不能自适应浏览器大小的改变(feedback:kaywood)(WorkItem#6309)。 -增加重载方法Alert.Show(message, ...

    超实用的jQuery代码段

    10.20 动态创建listview列表项 10.21 动态加载和切换页面 10.22 在页面切换时显示加载进度框 10.23 在屏幕旋转时更改显示样式 10.24 在列表框中实现加载更多效果 10.25 自定义选择菜单 10.26 使用多个选择菜单进行...

    python入门到高级全栈工程师培训 第3期 附课件代码

    06 关于模块的介绍 07 time时间模块 08 random模块 第22章 01 模块的补充 02 sys修改环境变量 03 BASEDIR的介绍 04 os模块的介绍 05 sys模块的介绍 06 json模块 07 pickle模块 08 shelve模块 09 XML模块 10 re模块...

    JavaScript基础教程第8版

    5.5 创建动态iframe 89 5.6 在文档之间共享函数 90 5.7 打开新窗口 92 5.8 为窗口加载不同的内容 96 第6章 表单处理 98 6.1 选择并转移导航菜单 99 6.2 动态地改变菜单 102 6.3 建立必须填写的字段...

    Discuz7.2 IE9兼容性写法 杜工完全修补方案

    动态创建iframe时各浏览器处理方式不同 解决方法: 1. 修改templates/header.htm 把 &lt;meta http-equiv=”x-ua-compatible” content=”ie=7″ /&gt; 替换为 复制代码代码如下: &lt;!–[if lte IE 8]&gt; &lt;...

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    主机管理项目动态调用插件进行数据解析 主机管理项目对模块中的参数进行解析 第24周 本节题纲 上节内容回顾 ModelForm操作及验证 ajax操作-原生ajax ajax操作-JQuery的ajax ajax操作-伪ajax(iframe) ajax操作-...

    IBM WebSphere Portal门户开发笔记01

    84、IFRAME的SRC获取JS函数代码作为HTML 365 85、STYLE.PIXELLEFT 365 十八、其他应用 366 1、添加NOTEPAD++到右脚菜单 366 2、 火狐浏览器设置为中文 367 3、 使新配置的域名生效 367 十九、PORTAL相关 368 1、完整...

    《javaScrip开发技术大全》源代码

    • sample06.htm 使用有缺省值的构造函数创建对象 • sample07.htm 使用带方法的构造函数创建对象 • sample08.htm 使用带方法的构造函数创建对象 • sample09.htm 遍历对象属性 •...

    《程序天下:JavaScript实例自学手册》光盘源码

    2.3 动态创建按钮 2.3 平面按钮 2.4 按钮的嵌入效果 2.5 按钮改变状态栏信息 2.6 定义按钮的热键 2.7 取得控件的绝对位置 2.8 删除时的确认提示 2.9 按钮只能单击一次 2.10 防止按钮连击 2.11 图片式按钮 2.12 文字...

    程序天下:JavaScript实例自学手册

    2.3 动态创建按钮 2.3 平面按钮 2.4 按钮的嵌入效果 2.5 按钮改变状态栏信息 2.6 定义按钮的热键 2.7 取得控件的绝对位置 2.8 删除时的确认提 示 2.9 按钮只能单击一次 2.10 防止按钮连击 2.11 图片式按钮 2.12 ...

    【卷一/共两卷】AJAX实战pdf高清版90M

    2.5.1 IFrame 2.5.2 XMLDocument和XMLHttpRequest对象 2 5.3 向服务器发送请求 2.5.4 使用回调函数监视请求 2.5.5 完整的生命周期 2.6 Ajax有何不同 2.7 小结 2.8 资源 第3章 使AjaX秩序井然 3.1 从混沌到秩序 3.1.1...

    JavaScript基础和实例代码

    1.2.4 动态页面 1.2.5 数值计算 1.3 JavaScript编程起步 1.3.1 “Hello World!”程序 1.3.2 选择JavaScript脚本编辑器 1.4 如何引入JavaScript脚本代码 1.4.1 通过与标记对引入 1.4.2 通过标记的src属性引入 1.4.3 ...

    源文件程序天下JAVASCRIPT实例自学手册

    1.2.4 动态页面 1.2.5 数值计算 1.3 JavaScript编程起步 1.3.1 “Hello World!”程序 1.3.2 选择JavaScript脚本编辑器 1.4 如何引入JavaScript脚本代码 1.4.1 通过[removed]与[removed]标记对引入 1.4.2 通过...

    400个DreamWeaver插件

    mxp/一组关于iframe的插件,可以插入iframe,并有详细的控制参数。还可以动态的改变iframe中的页面 mxp/插入一个颜色选择器。这只是Dreamweaver插件扩展能认识的,任何浏览器都不认识。制作插件时候使用 mxp/用来做...

    107个常用javascript语句

    常用iframe&lt;iframe id="IFramewindow" width="0" height="0" name='IFramewindow'&gt;&lt;/iframe&gt; -2.常用 //错误提示 function AlertErrorMeg(meg){ alert(meg); } //提示转向 function AlertRedirect(meg,url){ ...

    ASP200问.EXE

    16.如何创建和调整动态数组 18.如何计算中英文混合字符串的长度 19.如何判断字符串是否以指定字符串开头或结尾 20.如何判断字符是否是英文字符 21.如何检测字符串出现的次数 22.如何过滤字符串中的HTML代码 23.如何...

    C#编程经验技巧宝典

    107 &lt;br&gt;0176 如何动态改变数组长度 108 &lt;br&gt;0177 如何反转数组中元素的顺序 108 &lt;br&gt;0178 如何排序数组中的元素的顺序 109 &lt;br&gt;0179 如何创建动态数组 110 &lt;br&gt;5.5 NET应用技巧 110 ...

Global site tag (gtag.js) - Google Analytics