• iframe.contentWindow 属性:关于contentWindow和contentDocument区分


    定义和用法

      contentDocument 属性能够以 HTML 对象来返回 iframe 中的文档,可以通过所有标准的 DOM 方法来处理被返回的对象

      语法frameObject.contentWindow,或者 iframeObject.contentWindow(不是jquery对象)

      用iframe嵌套页面时,如果父页面要获取子页面里面的内容,可以使用contentWindow或者contentDocument,其区别如下:

      1、contentWindow  这是个只读属性,返回指定的iframe的窗口对象。它虽然不是标准的一部分,但各个主流浏览器都支持。

      2、contentDocument  Firefox 支持,IE6,IE7都不支持,IE8开始支持,需要如此访问 document.frames['J_mainframe'].document。

      兼容获取document对象:

    var getIFrameDoc = function(){
        var iobj = document.createElement("iframe");
        document.getElementsByTagName("body")[0].appendChild(iobj);
        return iobj.contentDocument || iobj.contentWindow.document;
    }

      基本使用:

    1、document.getElementById("myiframe").contentWindow,得到iframe对象后,就可以通过contentWindow得到iframe包含页面的window对象,然后就可以正常访问页面元素了;

    2、$("#myiframe")[0].contentWindow,jquery选择器获得iframe,先把jquery对象转换为DOM对象,或者使用get()方法转换;

    3、$("#myiframe")[0].contentWindow.$("#dd").val(),可以在得到iframe的window对象后接着使用jquery选择器进行页面操作;

    4、$("#myiframe")[0].contentWindow.username="zhangsan"; 可以通过这种方式向iframe页面传递参数,在iframe页面window.username就可以获取到值,username是自定义的全局变量

    5、在iframe页面通过parent可以获得主页面的window,接着就可以正常访问父亲页面的元素了;

    6、parent.$("#frame_A")[0].contentWindow.document.getElmentById("#frame_B"); 同级iframe页面之间调用,需要先得到父亲的window,然后调用同级的iframe得到window进行操作;

    //在子级iframe设置 父级 iframe ,或 孙级 iframe 高度。
    function showIframeH(){
        var parentWin = parent.document.getElementById("test");
        if(!parentWin) return false;
    
        var sub = parentWin.contentWindow.document.getElementById("test2");
        if(!sub) return false;
        
        var thirdHeight = sub.contentWindow.document.body.offsetHeight; //第三层 body 对象
        
        sub.height = thirdHeight; //设置第二层 iframe 的高度
        
        var secondHeight = parentWin .contentWindow.document.body.offsetHeight; //第二层 body 对象
        parentWin .height = secondHeight; //设置第一层 iframe 的高度
    }

    一、在使用iframe的页面时,要操作这个iframe里面的DOM元素可以用:contentWindow、contentDocument

    1、先获取iframe里面的window对象,再通过这个对象,获取到里面的DOM元素

    例子:

    var ifr = document.getElementById("iframe");
    ifr.contentWindow.document.getElementById("XXXXX")
    
    <iframe src="a.html" id=""></iframe>

      ifr.contentWindow 这里,返回的是iframe的window对象,所以后面可以接着调用document方法,再接着调用getElementByTagName。那么就可以对iframe里面的元素进行操作了。

    二、在iframe本页面,要操作这个iframe的父页面的DOM元素(即嵌套这个iframe的页面)可以用:

      window.parent、window.top(这里的TOP是获取的顶层,即有多层嵌套iframe的时候使用)

    var ifr = document.getElementByTagName("iframe");
    ifr.parent.document.getElementById("XXXXX")
    
    <iframe src="a.html" id=""></iframe>

    实例:

      top.$("iframe[name='iframeWindow']")[0].contentWindow.$("#inside_tableElement"),这样才能获取到iframe里的元素,
      注意:top.$("iframe[name='iframeWindow']").eq(0).$("#inside_tableElement"),是获取不到的
     
      再可以看看之前写的这篇博客:jquery 获取父窗口的元素、父窗口、子窗口
  • 相关阅读:
    《Head First 设计模式》 第八、九章 模板方法模式、迭代器模式、组合模式
    《Head First 设计模式》 第十、十一章 状态模式、代理模式
    《Head First 设计模式》 第六、七章 命令模式、适配器模式、外观模式
    《Head First 设计模式》 第四、五章 工厂模式、单例模式
    敏捷软件开发 第十章、第十一章、第十二章
    《Head First 设计模式》 第二、三章 观察者模式、装饰者模式
    二叉树-面试题27-二叉树的镜像
    堆栈-155-最小栈
    堆栈-20-有效括号
    java编程基础(六)----泛型
  • 原文地址:https://www.cnblogs.com/goloving/p/7828070.html
Copyright © 2020-2023  润新知