`

javascript之JS操作iframe

阅读更多


JS操作iframe

    1. 获得iframe的window对象
    2. 获得iframe的document对象
    3. iframe中获得父页面的window对象
    4. 获得iframe在父页面中的html标签
    5. iframe的onload事件
    6. frames
    参考文章

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';
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元素包含于父级页面中,因此以上方法均不存在跨域问题。

实际上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

参考文章

    Iframes, onload, and document.domain
    【翻译】Iframe, onload 与 document.domain
    《JS权威指南第五版》



http://www.cnblogs.com/rainman/archive/2011/02/16/1956431.html
分享到:
评论

相关推荐

    JS操作iframe里的dom(实例讲解)

    在JavaScript中,操作`iframe`内的DOM元素是常见的需求,特别是在构建复杂的网页应用时。`iframe`(Inline Frame)是一种可以在HTML文档中嵌入另一个HTML文档的元素,它允许我们实现页面分隔、加载外部资源或者创建...

    js操作iframe的一些知识

    ### JS操作Iframe的知识点详解 #### 一、概述 在网页开发中,经常会遇到需要通过JavaScript来控制或操作Iframe元素的情况。Iframe(Inline Frame)是一种可以在当前页面内嵌入其他页面的方式,常用于广告展示、...

    javascript动态调整iframe高度

    总之,`javascript`动态调整`iframe`高度的核心在于获取`iframe`内容的实际高度,并将其设置为`iframe`元素的`height`属性。通过正确处理同源策略和跨域通信,我们可以确保无论`iframe`内容如何变化,都能保持页面...

    js调用-嵌入iframe

    综上所述,"js调用-嵌入iframe"涉及到的主要知识点包括IFrame的基本使用、JavaScript与IFrame的交互以及测试中的注意事项。理解并掌握这些内容,对于网页开发尤其是动态内容加载和页面组件的复用具有重要意义。

    javascript写的可拖动的iframe

    然后,我们关注到"ifrWin.js",这是一个JavaScript文件,实现了iframe的拖动逻辑。在这个文件中,我们需要创建一个类来处理iframe的拖动事件。这个类可能包含初始化方法、事件监听器(如`mousedown`、`mousemove`和`...

    JS页面跳转和js对iframe进行页面跳转、刷新

    在IT领域,特别是前端开发中,JavaScript(简称JS)被广泛用于实现网页的动态功能,包括页面跳转和对iframe内的页面进行跳转与刷新。本文将深入解析JS页面跳转的各种方法,以及如何利用JS操作iframe进行页面跳转和...

    JS操作iframe里的dom

    JavaScript(简称JS)是一种广泛用于网页和网络应用的编程语言,尤其在操作DOM(文档对象模型)方面具有强大的功能。当涉及到在iframe中操作DOM时,情况会变得稍微复杂一些,因为iframe实际上是一个独立的浏览上下文...

    解决JS跨域访问IFrame的解决方案

    在Web开发中,JavaScript(JS)的同源策略限制了不同源之间进行交互,包括从一个页面中的脚本访问另一个不同源的IFrame内容。"解决JS跨域访问IFrame的解决方案"这一主题关注的就是如何克服这个限制,使得在JSP页面中...

    js处理iframe的系列问题

    利用JavaScript可以实现对`iframe`中的元素进行操作,例如读取或修改其中的内容。下面将详细介绍如何通过JavaScript来处理`iframe`中的各种问题。 #### 1. 访问`iframe`内部元素 根据提供的代码片段,“获取父页面...

    javascript经典特效---IFRAME间链接变换.rar

    3. **跨域问题**:由于同源策略的限制,JavaScript通常只能操作同源的IFRAME。如果IFRAME加载的是不同源的页面,你需要确保服务端设置允许跨域请求(CORS)或者使用`window.postMessage`进行安全的数据通信。 4. **...

    javascript 关闭iframe外层的div容器

    在JavaScript编程中,有时我们需要处理嵌入在页面中的`iframe`元素,并可能需要与外部页面交互,例如关闭`iframe`外部的某个`div`容器。这个需求通常出现在弹窗或者模态框的场景中,`iframe`用于承载特定的内容,而...

    javascript iframe parent?

    而"工具"标签可能意味着我们可以借助一些库或框架,如jQuery的`.contents()`方法来简化DOM操作,或者使用PostMessage库(如postmessage.js)来更方便地处理消息传递。 总结,JavaScript中的iframe与parent通信是Web...

    js调用iframe实现打印页面内容的方法

    jQuery是一个强大的JavaScript库,它提供了一个简洁的API来简化DOM操作、事件处理等。使用jQuery,可以轻松实现区域打印功能。具体步骤如下: 1. 引入jQuery库和对应的打印插件文件。 2. 使用jQuery选择器和事件...

    动态创建iframe,并动态添加js执行代码

    总结来说,动态创建iframe并动态添加js执行代码是Web开发中的重要技术,它能够帮助我们实现异步加载、跨域通信等功能,但同时也需要注意相关的安全问题。通过熟练掌握这些技术,开发者能够构建更复杂、更灵活的Web...

    js实现iframe自适应高度

    接下来,我们可以利用JavaScript的DOM操作和事件监听来实现自适应高度的功能。以下是一个基本的实现步骤: 1. **获取`iframe`元素**:通过`document.getElementById`或`querySelector`方法找到页面上的`iframe`元素...

    JAVASCRIPT让IFRAME框架的高度自适应

    通过使用JavaScript来让IFRAME框架的高度自适应,我们可以实现IFRAME框架的高度自动调整,以提高用户体验。同时,我们也可以使用这个方法来实现其他类型的高度自动调整,以满足不同的需求。 在实际应用中,我们可以...

    基于js的iframe 可关闭tab标签组件使用方法

    3. **JavaScript代码**:首先引入`jquery.js`库,它提供了一套强大的DOM操作和事件处理函数,简化了JavaScript编程。然后,编写JavaScript代码来实现tab切换和iframe加载。 ```javascript $(document).ready...

    js 实现iframe 之间传值

    JavaScript遵循同源策略,这意味着来自不同源(协议+域名+端口)的`iframe`之间默认无法通过JavaScript进行通信。为了解决这个问题,我们可以利用`window.postMessage()`方法,它允许跨域通信。 2. `window.post...

    javascript经典特效---Iframe页面的滚动.rar

    - 不同浏览器对JavaScript操作Iframe的支持程度不同,尤其是涉及到跨域操作时,需考虑IE、Firefox、Chrome、Safari等浏览器的差异。 - 使用`window.postMessage`进行跨域通信,可以实现更灵活的Iframe页面交互,但...

Global site tag (gtag.js) - Google Analytics