最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript iframe的相互操作淺析

 更新時間:2009年10月14日 14:56:46   作者:  
下面對iframe的所有操作都是在同一個域下進行,暫不考慮跨域調(diào)用
iframe元素也就是文檔中的文檔,或者好像浮動的框架(frame)。關于iframe的操作一直是一個疑難點,網(wǎng)上有很多這方面的文章介紹。下面我結合自己的經(jīng)驗,整理一下筆記記錄下來。
一、頁面
三個頁面:父頁面和兩個子頁面,兩個子頁面在父頁面的兩個iframe里。
1、父頁面MainForm.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="MainForm.aspx.cs" Inherits="Test.MainForm" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
   
<title></title>
</head>
<body>
   
<form id="form1" runat="server">
   
<div>
       
<ul>
           
<li>
                父頁面(文本失去焦點可看結果):
<input id="txtParent" name="txtParent" type="text" value="parent" onblur="iframeTest()" />
           
</li>
           
<li>
               
<iframe src="FrameA.aspx" id="iframeA"></iframe>
           
</li>
           
<li>
               
<iframe src="FrameB.aspx" id="iframeB"></iframe>
           
</li>
       
</ul>
   
</div>

   
<script type="text/javascript">

       
function iframeTest() {

       
}

   
</script>

   
</form>
</body>
</html>

2、子頁面A

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
   
<title></title>

   
<script type="text/javascript">

       
//子頁面與父頁面之間的操作  
       
function getParent() {

       
}

       
//當前子頁面與另外一個子頁面之間的操作
       
function getAnotherChild() {

       
}
   
</script>

</head>
<body>
   
<form id="form1" runat="server">
   
<div>
         子頁面1(文本失去焦點可看結果):
<input id="txtUserName" name="txtUserName" type="text" value="jeff wong" onblur="getParent()" />
   
</div>
   
</form>
</body>
</html>

3、子頁面B

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
   
<title></title>
</head>
<body>
   
<form id="form1" runat="server">
   
<div>
        子頁面2(文本失去焦點可看結果):
<input id="txtUserNameB" name="txtUserNameB" type="text"  value="jeffery zhao"/>
   
</div>
   
</form>
</body>
</html>


二、操作
1、父頁面操作子頁面
這個毫無疑問要在父頁面MainForm.aspx文件里實現(xiàn)。我們修改父頁面的javascript函數(shù)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內(nèi)的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內(nèi)的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")獲?。憧梢栽L問iframe對象的屬性,但不能訪問其內(nèi)容。
b、frames集合提供了對iframe內(nèi)容的訪問(通過document.frames["iframeName"]獲取)。通常情況下我們都使用frames集合讀寫iframe內(nèi)包含的元素。
c、 如果只想改變iframe的src或者border, scrolling等attributes(與property不是一個概念,property是不能寫在標簽內(nèi)的,比 如:scrollHeight,innerHTML等),就需要用到document.getElementById方法.
d、要想使用iframe內(nèi)的函數(shù)或dom元素(比如想得到iframe的document.body的內(nèi)容),變量就必須通過frames集合.因為它取的是一個完整的DOM模型,而通過id獲取的方法只是取出了一個object而已.
e、如果在iframe的頁面未完全裝載的時候,調(diào)用iframe的dom模型,會發(fā)生錯誤.

2、子頁面操作父頁面
這里以子頁面FrameA.aspx舉例。在子頁面A中,我們通過函數(shù)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()函數(shù):

 

        //當前子頁面與另外一個子頁面之間的操作
       
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()函數(shù),然后將子頁面A(FrameA.aspx)中的textUserName的onblur事件改為 onblur="getAnotherChild()"就可以看到結果了.

相關文章

  • js解析xml字符串和xml文檔實現(xiàn)原理及代碼(針對ie與火狐)

    js解析xml字符串和xml文檔實現(xiàn)原理及代碼(針對ie與火狐)

    分別針對ie和火狐分別作了對xml文檔和xml字符串的解析,考慮到了瀏覽器的兼容性,至于在ajax環(huán)境下解析xml,其實原理是一樣的,只不過放在了ajax里,還是要對返回的xml進行解析,感興趣的朋友可以了解下,或許對你學習js解析xml有所幫助
    2013-02-02
  • Javascript快速實現(xiàn)瀏覽器系統(tǒng)通知

    Javascript快速實現(xiàn)瀏覽器系統(tǒng)通知

    這篇文章給大家介紹了Javascript快速實現(xiàn)瀏覽器系統(tǒng)通知的方法,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-08-08
  • JS setCapture 區(qū)域外事件捕捉

    JS setCapture 區(qū)域外事件捕捉

    鼠標捕獲(setCapture)作用是將鼠標事件捕獲到當前文檔的指定的對象。這個對象會為當前應用程序或整個系統(tǒng)接收所有鼠標事件。
    2010-03-03
  • js+html5實現(xiàn)可在手機上玩的拼圖游戲

    js+html5實現(xiàn)可在手機上玩的拼圖游戲

    這篇文章主要介紹了js+html5實現(xiàn)可在手機上玩的拼圖游戲,涉及javascript結合html5進行圖形操作的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • javascript實現(xiàn)table表格隔行變色的方法

    javascript實現(xiàn)table表格隔行變色的方法

    這篇文章主要介紹了javascript實現(xiàn)table表格隔行變色的方法,涉及javascript針對表格元素與樣式的操作技巧,需要的朋友可以參考下
    2015-05-05
  • JS小知識之如何將CSV轉(zhuǎn)換為JSON字符串

    JS小知識之如何將CSV轉(zhuǎn)換為JSON字符串

    CSV文件一般是以逗號為分隔值的文件(Comma-Separated?Values,CSV,有時也稱為字符分隔值,因為分隔字符也可以不是逗號),其文件以純文本形式存儲表格數(shù)據(jù)(數(shù)字和文本),下面這篇文章主要給大家介紹了JS小知識之如何將CSV轉(zhuǎn)換為JSON字符串的相關資料,需要的朋友可以參考下
    2023-06-06
  • 一文詳解javascript語言中的類(class)

    一文詳解javascript語言中的類(class)

    class類是一種抽象的體現(xiàn),用來表示具有相同特性的一類事物,是面向?qū)ο缶幊滩豢扇鄙俚墓ぞ?下面這篇文章主要介紹了javascript語言中類class的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-04-04
  • IE innerHTML,outerHTML所引起的問題

    IE innerHTML,outerHTML所引起的問題

    我們在用javascript創(chuàng)建一個遮蓋層(div)后,如果點擊關閉用到了
    2009-06-06
  • 原生JavaScript+LESS實現(xiàn)瀑布流

    原生JavaScript+LESS實現(xiàn)瀑布流

    這篇文章主要介紹了原生JavaScript+LESS實現(xiàn)瀑布流的方法,附上了具體實例,這里推薦給有需要的小伙伴。
    2014-12-12
  • webpack多頁面開發(fā)實踐

    webpack多頁面開發(fā)實踐

    這篇文章主要介紹了webpack多頁面開發(fā)實踐,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12

最新評論

三河市| 安多县| 葫芦岛市| 奈曼旗| 隆尧县| 宿迁市| 宿州市| 油尖旺区| 门源| 阿鲁科尔沁旗| 革吉县| 景东| 尖扎县| 韩城市| 金塔县| 青海省| 仁寿县| 右玉县| 丹寨县| 潢川县| 乌拉特中旗| 蒙城县| 祥云县| 开原市| 米易县| 昌图县| 沙洋县| 淳化县| 新泰市| 花莲县| 高邮市| 榕江县| 木里| 泰州市| 靖安县| 德令哈市| 休宁县| 淳安县| 湖口县| 南康市| 武陟县|