JS操作iframe
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属性。
- function getIframeWindow(element){
- return element.contentWindow;
- //return element.contentWindow || element.contentDocument.parentWindow;
- }
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属性。
- var getIframeDocument = function(element) {
- return element.contentDocument || element.contentWindow.document;
- };
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中是不会有弹出框的。
- var ifr = document.createElement('iframe');
- ifr.src = 'http://www.b.com/index.php';
- ifr.onload = function() {
- alert('loaded');
- };
- document.body.appendChild(ifr);
var ifr = document.createElement('iframe');
ifr.src = 'http://www.b.com/index.php';
ifr.onload = function() {
alert('loaded');
};
document.body.appendChild(ifr);
但是ie却又似乎提供了onload事件,下面两种方法都会触发onload
- 方法一:
- <iframe onload="alert('loaded');" src="http://www.b.com/index.php"></iframe>
- 方法二:
- //只有ie才支持为createElement传递这样的参数
- var ifr = document.createElement('<iframe onload="alert('loaded');" src="http://www.b.com/index.php"></iframe>');
- document.body.appendChild(ifr);
方法一:
<iframe onload="alert('loaded');" src="http://www.b.com/index.php"></iframe> 方法二:
//只有ie才支持为createElement传递这样的参数
var ifr = document.createElement('<iframe onload="alert('loaded');" src="http://www.b.com/index.php"></iframe>');
document.body.appendChild(ifr);
由于iframe元素包含于父级页面中,因此以上方法均不存在跨域问题。
实际上IE提供了onload事件,但必须使用attachEvent进行绑定。
- var ifr = document.createElement('iframe');
- ifr.src = 'http://b.a.com/b.php';
- if (ifr.attachEvent) {
- ifr.attachEvent('onload', function(){ alert('loaded'); });
- } else {
- ifr.onload = function() { alert('loaded'); };
- }
- document.body.appendChild(ifr);
var ifr = document.createElement('iframe');
ifr.src = 'http://b.a.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
//////////////////////////////////////////// 运用 ////////////////////////////////////////////////////////////
var frames= document.getElementsByTagName("iframe");
for (var i = 0; i < frames.length; i++) {
//alert("frameID:" + frames[i].id + " tabid:" + tabid);
//var frame=frames[i];
}
*/
//获得iframe的对象fram
var fram = document.getElementById(tabid);
//src = params[1];
//document.fram.location.reload(); //刷新框架内的页面
//获得iframe的window对象contentWindow,以及js调用iframe内的js函数
fram.contentWindow.test11(); //test11() 为目标框架内的页面js函数
JS操作iframe的更多相关文章
- 原生JS操作iframe里的dom
转:http://www.css88.com/archives/2343 一.父级窗口操作iframe里的dom JS操作iframe里的dom可是使用contentWindow属性,contentW ...
- JS 操作iframe
很多人一直都有个想法,要是可以随心所欲的操作iframe就好了.这样静态页面也就有了相当于后台动态页面php,jsp,asp中include,require实现统一多页面布局的能力. 通过Javasc ...
- [置顶] js操作iframe兼容各种浏览器
在做项目时,遇到了操作iframe的相关问题.业务很简单,其实就是在操作iframe内部某个窗体时,调用父窗体的一个函数.于是就写了两个很简单的htm页面用来测试,使用网上流行的方法在谷歌浏览器中始终 ...
- js操作iframe总结
一 在父页面操作子页面 IE下操作IFrame内容的代码: document.frames["MyIFrame"].document.getElementById(" ...
- JS操作iframe元素
1. demo1.html页面中有个iframe元素,iframe元素的src是iframe1.html,怎么在demo1.html页面中操作iframe1.html页面 答曰:demo1.html ...
- js操作iframe框架时应该屡清楚的一些概念
1.获取iframe的window对象 存在跨域访问限制. iframeElement.contentWindow 兼容 2.获取iframe的document对象 存在跨域访问限制. chrome: ...
- js操作Iframe非当前最上层窗体
如果当前窗口不是最上层窗口(比如是在Iframe中),那么就把自己变为最上层窗口. <script language="javascript" type="tex ...
- 百度地图和js操作iframe
document.getElementById("ifarme-63").contentWindow.document.getElementById("qksv" ...
- JS操作未跨域iframe里的DOM
这里简单说明两个方法,都是未跨域情况下在index.html内操作b.html内的 DOM. 如:index.html内引入iframe,在index内如何用JS操作iframe内的DOM元素? 先贴 ...
随机推荐
- 解决在国内更新android sdk时连不到服务器的问题
修改hosts文件 Windows下:打开C:\Windows\System32\drivers\etc\hosts Linux下:vi /etc/hosts 在文件尾加入如下两行: 74.125.2 ...
- 【堆栈应用一】一个数divided=几个最小质因数的乘积(时间复杂度On)
此算法由LQD提供
- c#网络通信框架networkcomms内核解析之九 自定义处理方法的运行机制
NetworkComms网络通信框架序言 本文基于networkcomms2.3.1开源版本 gplv3协议 我们自己写的处理方法都称之为自定义处理方法 比如,我们在服务器上写的与登陆相关的处理方法 ...
- Quartz Spring与Spring Task总结
Spring对Quartz作了一个封装,同时,Spring自己也提供了一个任务定时器(spring-task),现把它总结一下. 对于Quartz,我们使用的时候主要是注重两个方面,一个是定时任 ...
- PHP 函数(2)
自定义函数: $name = "fakeface"; function dispalyName(){ echo "fakeface"; } function r ...
- Spring 中的 JDBC 事务
Spring 对 JDBC 的支持 JdbcTemplate 简介 •为了使 JDBC 更加易于使用, Spring 在 JDBC API 上定义了一个抽象层, 以此建立一个 JDBC 存取框架. • ...
- ubuntu 13.04 tftp服务器建立
本文参考博文:http://blog.chinaunix.net/uid-20718037-id-3194493.html 用tftp下载就需要要我们的主机上先安装tftp服务器. 1.安装软件 ...
- 【matlab】MATLAB程序调试方法和过程
3.8 MATLAB程序的调试和优化 在MATLAB的程序调试过程中,不仅要求程序能够满足设计者的设计需求,而且还要求程序调试能够优化程序的性能,这样使得程序调试有时比程序设计更为复杂.MATLAB ...
- github删除带有文件的文件夹
1. git pull you git url2. git checkout 3. rm -rf dirName4. git add --all5. git commit -m"remove ...
- good books