Iframe父頁面與子頁面之間的調用


Iframe父頁面與子頁面之間的調用

專業詞語解釋如下

    Iframe:iframe元素是文檔中的文檔。

    window對象: 瀏覽器會在其打開一個HTML文檔時創建一個對應的window對象。但是,如果一個文檔定義了一個或者多個框架(即:包含一個或者多個frame或者iframe標簽),瀏覽器就會為原始文檔創建一個window對象,再為每個iframe創建額外的window對象,這些額外的window對象是原始窗口的子窗口。

contentWindow: 是指指定的iframe或者iframe所在的window對象。

如果想要學習 "iframe之間的通信問題及iframe高度自適應",請看這邊文章:

iframe之間的通信問題及iframe高度自適應

父頁面與子頁面之間的調用。

現在我們可以慢慢做demo來分別講解下,假如有iframe父頁面為 iframe1.html, 父頁面上有2個子頁面 分別為iframe2.html 和 iframe3.html。

父頁面iframe1.html代碼如下:

<!doctype html>
<html lang="en">
 <head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="jquery1.7.js"></script>
 </head>
 <body>
    <iframe src="http://localhost/iframe/iframe3.html" id = "iframe3"></iframe>
    <iframe src="http://localhost/iframe/iframe2.html" id = "iframe2"></iframe>
    <div class="iframe1">父頁面</div>
   <script>
	function test2() {
	    console.log(1);
	}
   </script>
</body>
</html>

子頁面iframe2.html代碼如下:

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script src="jquery1.7.js"></script>
 </head>
 <body>
	<div id="test">aaa</div>
	<div class="iframe2">子頁面</div>
       <script>
           function b() {
	       console.log("我是子頁面");
	   }
	   function iframe3Page() {
	       console.log("iframe3頁面調用iframe2頁面");
	   }
      </script>
</body>
</html>

1.  子頁面iframe2.html調用父頁面 iframe1.html的元素如下代碼:

console.log($('.iframe1',parent.document));

2. 子頁面iframe2.html調用父頁面iframe1.html的函數如下代碼:

 parent.test2();

注意:父頁面iframe1.html頁面 中test2方法不能放在$(function(){}), 放在里面就調用不到。

3.     子頁面iframe2.html調用自身的iframe(假如父頁面有很多iframe,獲取自身iframe不通過id或者name屬性).

       1.  首先我們可以在父頁面上寫一個函數 用來獲取頁面所有的iframe,之后進行遍歷,進行判斷當前的window對象是否相同。如下代碼:

 function getFrame(f){
        var frames = document.getElementsByTagName("iframe");

         for(i=0;i<frames.length;i++){

                if(frames[i].contentWindow == f){

                     return(frames[i])

                 }

           }

  }

    2. 在子頁面iframe2.html中如下調用父頁面的方法 getFrame.

       /* 獲取自身的iframe */

var aa = parent.getFrame(this);
 console.log(aa);
$(aa).attr("flag",true);

  給iframe2設置屬性 flag: true, 如下截圖:

  

4.  父頁面iframe1.html調用子頁面 iframe2.html的元素及函數

    如下調用有誤的:

console.log(document.getElementById("iframe2").contentWindow.b());

    因為iframe2.html 有可能未加載完成,所以要等iframe2加載完成后再進行調用,所以我們需要 iframe2.onload = function(){}; 這樣再進行調用。為了兼容IE,我們可以如下封裝一個方法:

function iframeIsLoad(iframe,callback){

        if(iframe.attachEvent) {   

               iframe.attachEvent('onload',function(){

                     callback && callback();

               });

         }else {

                 iframe.onload = function(){

                      callback && callback();

                 }

         }

   }

調用方式如下

// 父頁面調用子頁面iframe2的方法

var iframe2 = document.getElementById("iframe2");

iframeIsLoad(iframe2,function(){

       iframe2.contentWindow.b();   // 打印出 我是子頁面    

       // 父頁面獲取子頁面iframe2的元素

       var iframeDom = $(".iframe2",iframe2.contentWindow.document);

       console.log(iframeDom);

});


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM