js操作iframe的一些方法介绍


Posted in Javascript onJune 25, 2013

1. 获得iframe的window对象
存在跨域访问限制。

chrome:iframeElement. contentWindow
firefox: iframeElement.contentWindow
ie6:iframeElement.contentWindow

文章Iframes, onload, and document.domain中说“he iframe element object has a property called contentDocument that contains the iframe's document object, so you can use the parentWindow property to retrieve the window object.”意思就是一些浏览器可以通过iframeElement.contentDocument.parentWindow获得iframe的window对象。但经过测试firefox、chrome的element.contentDocument对象没有parentWindow属性。

(javascript)

function getIframeWindow(element){         
    return  element.contentWindow;   
    //return  element.contentWindow || element.contentDocument.parentWindow;   
} 

2. 获得iframe的document对象
存在跨域访问限制。

chrome:iframeElement.contentDocument
firefox:iframeElement.contentDocument
ie:element.contentWindow.document
备注:ie没有iframeElement.contentDocument属性。

(javascript)

var getIframeDocument = function(element) {   
    return  element.contentDocument || element.contentWindow.document;   
};  

3. iframe中获得父页面的window对象
存在跨域访问限制。

父页面:window.parent
顶层页面:window.top
适用于所有浏览器

4. 获得iframe在父页面中的html标签
存在跨域访问限制。

window.frameElement(类型:HTMLElement),适用于所有浏览器

5. iframe的onload事件
非ie浏览器都提供了onload事件。例如下面代码在ie中是不会有弹出框的。

(javascript)

var ifr = document.createElement('iframe');   
ifr.src = 'https://3water.com/index.php';   
ifr.onload = function() {   
    alert('loaded');   
};   
document.body.appendChild(ifr);  

但是ie却又似乎提供了onload事件,下面两种方法都会触发onload

方法一:

<iframe  onload="alert('loaded');"  src="https://3water.com/index.php"></iframe>   
 
 
方法二:  
//只有ie才支持为createElement传递这样的参数
var ifr = document.createElement('<iframe  onload="alert('loaded');" src="https://3water.com/index.php"></iframe>');   
document.body.appendChild(ifr);  

由于iframe元素包含于父级页面中,因此以上方法均不存在跨域问题。

实际上IE提供了onload事件,但必须使用attachEvent进行绑定。

var ifr = document.createElement('iframe');   
ifr.src = 'http://b.3water.com/b.php';   
if (ifr.attachEvent) {   
    ifr.attachEvent('onload',  function(){ alert('loaded'); });   
} else {   
    ifr.onload  = function() { alert('loaded'); };   
}   
document.body.appendChild(ifr);  

6. frames
window.frames可以取到页面中的帧(iframe、frame等),需要注意的是取到的是window对象,而不是HTMLElement。

var ifr1 = document.getElementById('ifr1');   
var ifr1win = window.frames[0];   
ifr1win.frameElement === ifr1;   // true   
ifr1win === ifr1;    // false  
Javascript 相关文章推荐
jQuery使用手册之 事件处理
Mar 24 Javascript
js实现仿阿里巴巴城市选择框效果实例
Jun 24 Javascript
基于JavaScript Array数组方法(新手必看篇)
Aug 20 Javascript
JS动态计算移动端rem的解决方案
Oct 14 Javascript
详解webpack异步加载业务模块
Jun 23 Javascript
JS通过调用微信API实现微信支付功能的方法示例
Jun 29 Javascript
vue-cli项目代理proxyTable配置exclude的方法
Sep 20 Javascript
多个vue子路由文件自动化合并的方法
Sep 03 Javascript
jQuery使用ajax传递json对象到服务端及contentType的用法示例
Mar 12 jQuery
JavaScript实现字符串与HTML格式相互转换
Mar 17 Javascript
js实现简单贪吃蛇游戏
May 15 Javascript
javascript的setTimeout()使用方法总结
Nov 20 Javascript
动态获取复选框checkbox选中个数的jquery代码
Jun 25 #Javascript
JQuery在页面中添加和除移DOM示例代码
Jun 24 #Javascript
使用jQuery UI的tooltip函数修饰title属性的气泡悬浮框
Jun 24 #Javascript
js实现右下角可关闭最小化div(可用于展示推荐内容)
Jun 24 #Javascript
javascript截取字符串(通过substring实现并支持中英文混合)
Jun 24 #Javascript
原生Js实现元素渐隐/渐现(原理为修改元素的css透明度)
Jun 24 #Javascript
原生Js页面滚动延迟加载图片实现原理及过程
Jun 24 #Javascript
You might like
php实现概率性随机抽奖代码
2016/01/02 PHP
php实现批量修改文件名称的方法
2016/07/23 PHP
PHP入门教程之面向对象的特性分析(继承,多态,接口,抽象类,抽象方法等)
2016/09/11 PHP
php格式化时间戳
2016/12/17 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
php实现微信企业转账功能
2018/10/02 PHP
通过JS 获取Mouse Position(鼠标坐标)的代码
2009/09/21 Javascript
理解Javascript_02_理解undefined和null
2010/10/11 Javascript
Javascript 实现的数独解题算法网页实例
2013/10/15 Javascript
深入理解JavaScript系列(40):设计模式之组合模式详解
2015/03/04 Javascript
JavaScript数据类型学习笔记分享
2016/09/01 Javascript
node+vue实现用户注册和头像上传的实例代码
2017/07/20 Javascript
小程序云开发之用户注册登录
2019/05/18 Javascript
详解node登录接口之密码错误限制次数(含代码)
2019/10/25 Javascript
iview实现图片上传功能
2020/06/29 Javascript
vue中后端做Excel导出功能返回数据流前端的处理操作
2020/09/08 Javascript
[02:54]DOTA2亚洲邀请赛 VG战队出场宣传片
2015/02/07 DOTA
使用python实现扫描端口示例
2014/03/29 Python
Python编程之属性和方法实例详解
2015/05/19 Python
Python的Django框架中的数据过滤功能
2015/07/17 Python
python+django加载静态网页模板解析
2017/12/12 Python
Python解决走迷宫问题算法示例
2018/07/27 Python
Python测试网络连通性示例【基于ping】
2018/08/03 Python
详解django实现自定义manage命令的扩展
2019/08/13 Python
Python 面向对象之封装、继承、多态操作实例分析
2019/11/21 Python
Python字典中的值为列表或字典的构造实例
2019/12/16 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
python在一个范围内取随机数的简单实例
2020/08/16 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
2021/03/03 Python
css3实现二维码扫描特效的示例
2020/10/29 HTML / CSS
英国标志性生活方式品牌:Skinnydip London
2019/12/15 全球购物
database面试题
2013/03/28 面试题
小学阳光体育活动总结
2014/07/05 职场文书
小学英语新课改心得体会
2016/01/22 职场文书
Nginx+SpringBoot实现负载均衡的示例
2021/03/31 Servers
教你利用Nginx 服务搭建子域环境提升二维地图加载性能的步骤
2021/09/25 Servers