获取iframe的window对象
在父窗口中获取iframe中的元素
// JS // 方法1: var iframeWindow = window.frames["iframe的name或id"]; iframeWindow.document.getElementById("iframe中控件的ID"); // 方法2: var iframeWindow = document.getElementById("iframe的name或id").contentWindow; iframeWindow.document.getElementById("iframe中控件的ID"); // Jquery // 方法1: $("#iframe的ID").contents().find("#iframe中的控件ID"); // 方法2: $("#iframe中的控件ID", document.frames("iframe的name").document);
在iframe中获取父窗口的元素
// JS获取父窗口 var parentWindow = window.parent; var parentDocument = window.parent.window; var parentElement = window.parent.document.getElementById("父窗口的元素ID"); // JS获取顶层窗口 var topWindow = window.top; // Jquery获取父窗口 $('#父窗口中的元素ID', parent.document).click();
以下内容转载自 https://blog.csdn.net/blog4j/article/details/8501452
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; }
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; };
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](http://www.2cto.com/kf/web/php/)'; ifr.onload = function() { alert('loaded'); }; document.body.appendChild(ifr);
但是ie却又似乎提供了onload事件,下面两种方法都会触发onload
//方法一: <iframe οnlοad="alert('loaded');" src="http://www.b.com/index.php"></iframe> //方法二: //只有ie才支持为createElement传递这样的参数 var ifr = document.createElement('<iframe οnlοad="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);
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律