iframe
. iframe 的操作
1) 获得 iframe 的 window 对象。存在跨域访问限制。
chrome: iframeElement. contentWindow
firefox: iframeElement.contentWindow
ie6: iframeElement.contentWindow
function getIframeWindow(element){
return element.contentWindow;
//return element.contentWindow || element.contentDocument.parentWindow;
}
2) 获得 iframe 的 document 对象。存在跨域访问限制。
chrome: iframeElement.contentDocument
firefox: iframeElement.contentDocument
ie: iframeElement.contentWindow.document // ie没有 iframeElement.contentDocument 属性。
function getIframeDocument(element) {
return element.contentDocument || element.contentWindow.document;
}
3) iframe 中获得父页面的 window 对象。存在跨域访问限制。
父页面:window.parent
顶层页面:window.top
适用于所有浏览器
4) 获得 iframe 的内容。存在跨域访问限制。
firefox: iframeElement.contentDocument.documentElement.textContent
ie: iframeElement.contentWindow.document.documentElement.innerText
function getIframeText(element) {
var iframeDocument = element.contentDocument || element.contentWindow.document;
var documentElement = iframeDocument.documentElement || iframeDocument.body;
return documentElement.textContent || documentElement.innerText;
}
5) iframe的 onload 事件
非ie浏览器都提供了 onload 事件。例如下面代码在ie中是不会有弹出框的。
var ifr = document.createElement('iframe');
ifr.src = 'http://www.b.com/index.html';
ifr.onload = function() {
alert('loaded');
};
document.body.appendChild(ifr);
但是ie却又似乎提供了onload事件,下面两种方法都会触发onload
//方法一:
<iframe onload="alert('loaded');" src="http://www.b.com/index.html"></iframe>
//只有ie才支持为createElement传递这样的参数
var ifr = document.createElement('<iframe onload="alert(\'loaded\');" src="http://www.b.com/index.html"></iframe>');
document.body.appendChild(ifr);由于iframe元素包含于父级页面中,因此以上方法均不存在跨域问题。
实际上IE提供了 onload 事件,但必须使用attachEvent进行绑定。所以最好的 onload事件写法如下:
var ifr = document.createElement('iframe');
ifr.src = 'http://b.a.com/b.html';
var loaded_fun = function(){ alert('loaded'); }; // 要执行的 onload 事件
if (ifr.attachEvent) {
ifr.attachEvent('onload', loaded_fun );
} else {
ifr.onload = loaded_fun;
}
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 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?