iframe

  1. 修改第一个 <iframe> 元素 (索引为 0) 的 src 属性值:window.frames[0].location = "https://www.runoob.com/";
  2. window.frames[]在Firefox下无法兼容的解决方式

    1.    html代码段: <iframe id="fr" src="ProjectTree.aspx?IsFree=true&f=yes&IsCheckProjectAuthority=false" frameborder="0" scrolling="no" style="height:100%; width: 100%;"></iframe>

      JavaScript代码段: 1 window.frames["fr"].XX方法(); //XX方法在此iframe内容中已经定义;这段代码在IE下能正常调用,但在Firefox下报错,因为Firefox无法通过id属性值获取到此iframe的window对象,Firefox是通过name属性值获取它的

        解决方式,修改html代码段,如下: <iframe id="fr" name="fr" src="ProjectTree.aspx?IsFree=true&f=yes&IsCheckProjectAuthority=false" frameborder="0" scrolling="no" style="height:100%; width: 100%;"></iframe>

      区别在于:新增name属性,它的属性值跟id属性值保持一致,在Firefox中会读取name属性值去获取到对应名称的iframe的window对象。 如果要获取iframe的element对象,比如要设置它的src属性值,这里建议用document.getElementById方法获取。

  3.   1)    如何获取子iframe框架中的window对象呢(也就是获取当前window对象的子窗体iframe)?
    获取指定的iframe的window对象有三种方式:
    a.通过window.frames[索引]:比如如果有两个当前窗体有两个iframe一个name=test1,一个name=test2,那么我想要获取name为test2的iframe我就可以这样使用:window.frames[1],获取的就是当前窗体中包含的名词为test2的子窗体
    b.通过window.frames[“iframe名称”]:通过iframe的名词获取首先iframe得有name属性,这样才可以获取到,比如当前窗体包含了一个name=main的iframe,则访问这个iframe直接使用window.frames[“main”]就可以了。
    c.第三种方式其实就是通过document对象获取iframe,接着再获取iframe中的window对象,如:window.document.getElementById(“iframeid”).contentWindow
    总结:这三种方式其实都是获取子窗体iframe的window对象,可以直接操作iframe的window对象属性,可以直接操作该iframe中的函数。关键是获取到每个iframe中的window,这样才能获取到其的函数和document对象。
    注意:也许会遇到奇葩的情况,比如通过window.frames[“iframe的名词”]. frames[“iframe的名词”]. frames[“iframe的名称”]获取指定名词的iframe,但是获取不到,却也存在该iframe,此时该怎么办呢?通过名称获取不到,可以通过索引获取啊。
    2)    parent属性如何使用
    刚才说了一下如何访问当前window对象子窗体iframe,那么,如何访问当前window窗体的父窗体呢?就是通过window对象的parent属性。
    parent.window获取的就是父窗体的window对象。比如如果要调用父窗体的main函数,就可以使用parent.window.main();
    3)    top属性如何使用
    如何获取一个iframe最顶层的window对象呢?可以使用top.window,获取的就是iframe最顶层的窗口。调用最顶层的方法一样调用,top.window.method
    4.    如何调用iframe中的函数,如果操作iframe中的标签元素?
    通过3的分析可以获取iframe的window对象,那么操作iframe中的函数和标签就变得简单了,因为操作iframe中的函数其实就是调用iframe中window中的函数,直接用iframe的window对象调用函数就可以了;如:当前window中包含一个iframe,iframe框架中有一个main函数,那么如何通过父窗体调用子窗体的函数呢?有三种方式:
    window.frames[索引].main();
    window.frames[“iframe名称”].main();
    window.document.getElementById(“iframeId”).contentWindow.main();
    现在iframe框架中的方法可以通过window对象直接调用,但是如何操作iframe中的标签元素呢?直接用iframe的window对象的document属性对象就可以操作了。获取到document对象,想怎么操作标签元素就怎么操作标签元素。
    window.frames[索引].document;
    window.frames[“iframe名称”].document;
    window.document.getElementById(“iframeId”).contentWindow.document;
    window.document.getElementById(“iframeId”).contentDocument;
    通过这四种方式获取子窗体的document,document对象获取之后就可以操作iframe框架中的元素了。一般通过document的方法操作元素。如果想要调用父窗体的函数或者是操作父窗体的标签元素,直接使用:parent.window.document获取父窗体的document对象,使用parent.window.函数名,直接调用父窗体的函数。如果iframe有多层嵌套,那么一层一层去取,方法都相似。
    二、    document对象
    简单的说document对象就是window对象的属性对象。其实就是一个html文档结构。
    那么document有啥用呢?document对象可以操作html文档中的任意一个节点,可以添加修改删除查找一个节点,可以获取某个标签的值,某个标签的属性节点的值。
    常用方法:
    document.getElementById(“标签元素id属性”) 返回单个元素
    document.getElementsByName(“标签元素的name属性”)返回数组对象
    document.getElemetsByTagName(“标签名”)返回数组对象
  4. <a>标签的target指向iframe
    1. <iframe id="myFrameId" name="myFrameName" scrolling="no" frameborder="0" style="width:200px; height:150px; "></iframe>
    2. <a href="xx.html" target="myFrameName" >打印二维码</a>

posted on 2018-09-18 21:47  手握太阳  阅读(280)  评论(0编辑  收藏  举报

导航