最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

JavaScriptiframe的相互操作浅析_javascript技巧

来源:懂视网 责编:小采 时间:2020-11-27 20:44:45
文档

JavaScriptiframe的相互操作浅析_javascript技巧

JavaScriptiframe的相互操作浅析_javascript技巧:iframe元素也就是文档中的文档,或者好像浮动的框架(frame)。关于iframe的操作一直是一个疑难点,网上有很多这方面的文章介绍。下面我结合自己的经验,整理一下笔记记录下来。一、页面三个页面:父页面和两个子页面,两个子页面在父页面的两个iframe里
推荐度:
导读JavaScriptiframe的相互操作浅析_javascript技巧:iframe元素也就是文档中的文档,或者好像浮动的框架(frame)。关于iframe的操作一直是一个疑难点,网上有很多这方面的文章介绍。下面我结合自己的经验,整理一下笔记记录下来。一、页面三个页面:父页面和两个子页面,两个子页面在父页面的两个iframe里

iframe元素也就是文档中的文档,或者好像浮动的框架(frame)。关于iframe的操作一直是一个疑难点,网上有很多这方面的文章介绍。下面我结合自己的经验,整理一下笔记记录下来。
一、页面
三个页面:父页面和两个子页面,两个子页面在父页面的两个iframe里。
1、父页面MainForm.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="MainForm.aspx.cs" Inherits="Test.MainForm" %>











  • 父页面(文本失去焦点可看结果):










  • 2、子页面A

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="FrameA.aspx.cs" Inherits="Test.FrameA" %>








    子页面1(文本失去焦点可看结果):




    3、子页面B

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="FrameB.aspx.cs" Inherits="Test.FrameB" %>








    子页面2(文本失去焦点可看结果):




    二、操作
    1、父页面操作子页面
    这个毫无疑问要在父页面MainForm.aspx文件里实现。我们修改父页面的javascript函数iframeTest,看父页面如何获取和操作子页面元素的:

     function iframeTest() {
    var frame1 = document.getElementById("iframeA");
    var frame2 = document.getElementById("iframeB");

    var frameA = document.frames["iframeA"]; //等价于 var frameAa = document.frames.iframeA;
    var frameB = document.frames["iframeB"]; //等价于 var frameBb = document.frames.iframeB;

    //**********************************************
    alert(frame1 == frameA); //false
    alert(frame2 == frameB); //false

    alert(frame1.src); //FrameA.aspx
    alert(frame1.location); //undefined
    alert(frameA.src); //undefined

    alert(frameA.location); //location
    alert(frameA.document.location);

    alert(frame1.document.body.innerHTML); //这里返回的是MainForm.aspx的body里的innerHTML
    alert(frame1.document.documentElement.innerHTML); //这里返回的是MainForm.aspx的html里的innerHTML

    alert(frameA.document.body.innerHTML); //这里返回的是FrameA.aspx的body里的innerHTML
    alert(frameA.document.documentElement.innerHTML); //这里返回的是FrameA.aspx的html里的innerHTML

    //**********************************************
    var childFrameDoc = undefined;

    //取FrameA.aspx内的input文本
    if (document.all) {//IE
    childFrameDoc = frameA.document; //*** 如果是frame1,就取不到FrameA.aspx页面里的input ***
    } else {//Firefox
    childFrameDoc = frameA.contentDocument;
    }
    alert(childFrameDoc.body.innerHTML);

    var childTxt = childFrameDoc.getElementById("txtUserName");
    var childTxtByName = childFrameDoc.getElementsByName("txtUserName");

    alert(childTxt == childTxtByName[0]); //true
    alert(childTxt.value); //jeff wong
    alert(childTxtByName[0].value); // jeff wong


    //取FrameB.aspx内的input文本
    childFrameDoc = undefined;
    if (document.all) {//IE
    childFrameDoc = frameB.document;
    } else {//Firefox
    childFrameDoc = frameB.contentDocument;
    }
    alert(childFrameDoc.body.innerHTML);

    var childTxt = childFrameDoc.getElementById("txtUserNameB");
    var childTxtByName = childFrameDoc.getElementsByName("txtUserNameB");

    alert(childTxt == childTxtByName[0]); //true
    alert(childTxt.value); //jeffery zhao
    alert(childTxtByName[0].value); // jeffery zhao

    }

    小结:
    a、通过iframe对象所在页面的对象模型(通过document.getElementById("iframeId")获取),你可以访问iframe对象的属性,但不能访问其内容。
    b、frames集合提供了对iframe内容的访问(通过document.frames["iframeName"]获取)。通常情况下我们都使用frames集合读写iframe内包含的元素。
    c、 如果只想改变iframe的src或者border, scrolling等attributes(与property不是一个概念,property是不能写在标签内的,比 如:scrollHeight,innerHTML等),就需要用到document.getElementById方法.
    d、要想使用iframe内的函数或dom元素(比如想得到iframe的document.body的内容),变量就必须通过frames集合.因为它取的是一个完整的DOM模型,而通过id获取的方法只是取出了一个object而已.
    e、如果在iframe的页面未完全装载的时候,调用iframe的dom模型,会发生错误.

    2、子页面操作父页面
    这里以子页面FrameA.aspx举例。在子页面A中,我们通过函数getParent获取MainForm.aspx的dom元素,然后按照正常的dom元素操作就是了:

     //子页面与父页面之间的操作 
    function getParent() {
    if (self != top) {
    var oDoc = top.parent.document;
    alert(oDoc.body.innerHTML);
    alert(oDoc.documentElement.innerHTML);
    alert(oDoc.frames.length); //返回结果:2 表明父页面有两个iframe

    //操作父页面的文本框
    var oTxt = oDoc.getElementById("txtParent");
    alert(oTxt.value);

    }
    else alert("不在框架中");
    }


    3、子页面操作子页面
    这个还要借助主页面间接获取另一个子页面。这里还以子页面A来举例。通过主页面,我们间接获取了子页面B,然后像正常操作dom一样,子页面A完成对子页面B的控制和操作。
    先修改getAnotherChild()函数:

     //当前子页面与另外一个子页面之间的操作
    function getAnotherChild() {
    alert(self.location.href); //当前页面的url

    //通过父页面,间接获取另外一个子页面
    if (self != top) {
    var oDoc = top.parent.document;
    var oAnotherFrame = oDoc.frames["iframeB"]; //返回另外一个iframe

    alert(oAnotherFrame.location);
    alert(oAnotherFrame.document.body.innerHTML);
    alert(oAnotherFrame.document.documentElement.innerHTML);

    var oTxt = oAnotherFrame.document.getElementById("txtUserNameB");
    alert(oTxt.value); //jeffery zhao
    }
    }

    注意:修改完getAnotherChild()函数,然后将子页面A(FrameA.aspx)中的textUserName的onblur事件改为 onblur="getAnotherChild()"就可以看到结果了.

    文档

    JavaScriptiframe的相互操作浅析_javascript技巧

    JavaScriptiframe的相互操作浅析_javascript技巧:iframe元素也就是文档中的文档,或者好像浮动的框架(frame)。关于iframe的操作一直是一个疑难点,网上有很多这方面的文章介绍。下面我结合自己的经验,整理一下笔记记录下来。一、页面三个页面:父页面和两个子页面,两个子页面在父页面的两个iframe里
    推荐度:
    标签: 操作 javascript jav
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top