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

利用JS對iframe父子(內(nèi)外)頁面進行操作的方法教程

 更新時間:2017年06月15日 10:26:26   投稿:daisy  
這篇文章主要給大家介紹了利用JS對iframe父子(內(nèi)外)頁面進行操作的方法教程,其中包括了怎么對iframe進行操作、在iframe里面控制iframe外面的js代碼以及在父框架對子iframe進行操作等,需要的朋友可以參考借鑒。

本文主要給大家介紹了關于利用JS對iframe父子(內(nèi)外)頁面進行操作的方法,分享出來供大家參考學習,下面來一起看看詳細的介紹:

一、獲取iframe里的內(nèi)容

在開始之前,首先我們來看看如何獲取iframe里的內(nèi)容,獲取iframe中內(nèi)容主要的兩個API就是contentWindow,和contentDocument iframe.contentWindow, 獲取iframe的window對象 iframe.contentDocument, 獲取iframe的document對象 這兩個API只是DOM節(jié)點提供的方式(即getELement系列對象)

 var iframe = document.getElementById("iframe1");
 var iwindow = iframe.contentWindow;
 var idoc = iwindow.document;
  console.log("window",iwindow);//獲取iframe的window對象
  console.log("document",idoc); //獲取iframe的document
  console.log("html",idoc.documentElement);//獲取iframe的html
  console.log("head",idoc.head); //獲取head
  console.log("body",idoc.body); //獲取body

實際情況如:

另外更簡單的方式是,結(jié)合Name屬性,通過window提供的frames獲取.

<iframe src ="/index.html" id="ifr1" name="ifr1" scrolling="yes">
 <p>Your browser does not support iframes.</p>
</iframe>
<script type="text/javascript">
 console.log(window.frames['ifr1'].window);
console.dir(document.getElementById("ifr1").contentWindow);
</script>

其實window.frames[‘ifr1’]返回的就是window對象,即

window.frames['ifr1']===window

這里就看你想用哪一種方式獲取window對象,兩者都行,不過本人更傾向于第二種使用frames[xxx].因為,字母少啊喂~ 然后,你就可以操控iframe里面的DOM內(nèi)容。

二、在iframe中獲取父級內(nèi)容

同理,在同域下,父頁面可以獲取子iframe的內(nèi)容,那么子iframe同樣也能操作父頁面內(nèi)容。在iframe中,可以通過在window上掛載的幾個API進行獲取.

  • window.parent 獲取上一級的window對象,如果還是iframe則是該iframe的window對象
  • window.top 獲取容器的window對象,即,就是你打開頁面的文檔
  • window.self 返回自身window的引用??梢岳斫?window===window.self(腦殘)

如圖:

獲取了之后,我們就可以進行相關操作了。 在同域的iframe中,我們可以巧妙的使用iframe的黑科技來實現(xiàn)一些trick.

iframe的輪詢

話說在很久很久以前,我們實現(xiàn)異步發(fā)送請求是使用iframe實現(xiàn)的~! 怎么可能!!! 真的史料為證(自行google), 那時候為了不跳轉(zhuǎn)頁面,提交表單時是使用iframe提交的?,F(xiàn)在,前端發(fā)展真快,websocket,SSE,ajax等,逆天skill的出現(xiàn),顛覆了iframe, 現(xiàn)在基本上只能活在IE8,9的瀏覽器內(nèi)了。 但是,寶寶以為這樣就可以不用了解iframe了,而現(xiàn)實就是這么殘酷,我們目前還需要兼容IE8+。所以,iframe 實現(xiàn)長輪詢和長連接的trick 我們還是需要涉獵滴。

iframe長輪詢

如果寫過ajax的童鞋,應該知道,長輪詢就是在ajax的readyState = 4的時,再次執(zhí)行原函數(shù)即可。 這里使用iframe也是一樣,異步創(chuàng)建iframe,然后reload, 和后臺協(xié)商好, 看后臺哥哥們將返回的信息放在,然后獲取里面信息即可. 這里是直接放在body里.

var iframeCon = docuemnt.querySelector('#container'),
 text; //傳遞的信息
 var iframe = document.createElement('iframe'),
 iframe.id = "frame",
 iframe.style = "display:none;",
 iframe.name="polling",
 iframe.src="target.html";
 iframeCon.appendChild(iframe);
 iframe.onload= function(){
 var iloc = iframe.contentWindow.location,
 idoc = iframe.contentDocument;
 setTimeout(function(){
 text = idoc.getElementsByTagName('body')[0].textContent;
 console.log(text);
 iloca.reload(); //刷新頁面,再次獲取信息,并且會觸發(fā)onload函數(shù)
 },2000);
 }

這樣就可以實現(xiàn)ajax的長輪詢的效果。 當然,這里只是使用reload進行獲取,你也可以添加iframe和刪除iframe的方式,進行發(fā)送信息,這些都是根據(jù)具體場景應用的。另外在iframe中還可以實現(xiàn)異步加載js文件,不過,iframe和主頁是共享連接池的,現(xiàn)在基本上都被XHR和hard calllback取締了,這里也不過多介紹了。

1.js在iframe子頁面操作父頁面元素代碼:

window.parent.document.getElementByIdx_x("父頁面元素id");

2.js在父頁面獲取iframe子頁面元素代碼如下:

window.frames["iframe_ID"].document.getElementByIdx_x("子頁面元素id");

3. jquery在iframe子頁面獲取父頁面元素代碼如下:

$("#objid",parent.document)

4. jquery在父頁面獲取iframe子頁面的元素

$("#objid",document.frames('iframename').document)

5.在iframe中調(diào)用父頁面中定義的方法和變量:

window.parent.window.parentMethod();
window.parent.window.parentValue;

6.在父頁面操作iframe子頁面的方法和變量

window.frames["iframe_ID"].window.childMethod();
window.frames["iframe_ID"].window.childValue;

一、同域下父子頁面的通信

父頁面parent.html

<html>
<head>
 <script type="text/javascript">
  function say(){
   alert("parent.html");
  }
  function callChild(){
   myFrame.window.say();
   myFrame.window.document.getElementById("button").value="調(diào)用結(jié)束";
  }
 </script>
</head>
<body>
 <input id="button" type="button" value="調(diào)用child.html中的函數(shù)say()" onclick="callChild()"/>
 <iframe name="myFrame" src="http://caibaojian.com/child.html"></iframe>
</body>
</html>

子頁面child.html

<html>
<head>
 <script type="text/javascript">
  function say(){
   alert("child.html");
  }
  function callParent(){
   parent.say();
   parent.window.document.getElementById("button").value="調(diào)用結(jié)束";
  }
 </script>
</head>
<body>
 <input id="button" type="button" value="調(diào)用parent.html中的say()函數(shù)" onclick="callParent()"/>
</body>
</html>

注意事項

要確保在iframe加載完成后再進行操作,如果iframe還未加載完成就開始調(diào)用里面的方法或變量,會產(chǎn)生錯誤。判斷iframe是否加載完成有兩種方法:

      1. iframe上用onload事件

      2. 用document.readyState=="complete"來判斷

二、跨域父子頁面通信方法

如果iframe所鏈接的是外部頁面,因為安全機制就不能使用同域名下的通信方式了。

1.父頁面向子頁面?zhèn)鬟f數(shù)據(jù)

實現(xiàn)的技巧是利用location對象的hash值,通過它傳遞通信數(shù)據(jù)。在父頁面設置iframe的src后面多加個data字符串,然后在子頁面中通過某種方式能即時的獲取到這兒的data就可以了,例如:

1.1 在子頁面中通過setInterval方法設置定時器,location.href的變化即可獲得上面的data信息

1.2. 然后子頁面根據(jù)這個data信息進行相應的邏輯處理

2.子頁面向父頁面?zhèn)鬟f數(shù)據(jù)

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關文章

  • JavaScript 正則命名分組【推薦】

    JavaScript 正則命名分組【推薦】

    以往我們只是習慣于通過數(shù)組下標來訪問正則匹配到的分組,但分組達到4、5個時,標識起來就會非常麻煩。V8早已實現(xiàn)了正則命名分組提案,只是我們很少使用,本文將介紹JS的正則命名分組
    2018-06-06
  • 整理Javascript事件響應學習筆記

    整理Javascript事件響應學習筆記

    整理Javascript事件響應學習筆記,之前一系列的文章是跟我學習Javascript,本文就是進一步學習javascript流程控制語句,希望大家繼續(xù)關注
    2015-12-12
  • js改變embed標簽src值的方法

    js改變embed標簽src值的方法

    這篇文章主要介紹了js改變embed標簽src值的方法,涉及javascript操作元素屬性的技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • js圖片翻書效果代碼分享

    js圖片翻書效果代碼分享

    這篇文章主要介紹了js實現(xiàn)圖片翻書效果,代碼簡單,效果很棒,感興趣的小伙伴們可以參考一下
    2015-08-08
  • 微信小程序MUI導航欄透明漸變功能示例(通過改變rgba的a值實現(xiàn))

    微信小程序MUI導航欄透明漸變功能示例(通過改變rgba的a值實現(xiàn))

    這篇文章主要介紹了微信小程序MUI導航欄透明漸變功能,結(jié)合實例形式分析了通過改變rgba的a值實現(xiàn)透明度漸變功能的相關操作技巧,需要的朋友可以參考下
    2019-01-01
  • js格式化時間的方法

    js格式化時間的方法

    這篇文章主要介紹了js格式化時間的方法,對javascript時間格式化的方法進行了總結(jié),感興趣的小伙伴們可以參考一下
    2015-12-12
  • [Web]防止用戶復制頁面內(nèi)容和另存頁面的方法

    [Web]防止用戶復制頁面內(nèi)容和另存頁面的方法

    原理就是利用js控制一些復制等事件,但破解也簡單,這里就不說了。
    2009-02-02
  • 微信小程序movable view移動圖片和雙指縮放實例代碼

    微信小程序movable view移動圖片和雙指縮放實例代碼

    movable-area是微信小程序的新組件,可以用來移動視圖區(qū)域movable-view。這篇文章主要介紹了微信小程序movable view移動圖片和雙指縮放實例代碼,需要的朋友可以參考下
    2017-08-08
  • 淺析Promise的介紹及基本用法

    淺析Promise的介紹及基本用法

    Promise是異步編程的一種解決方案,在ES6中Promise被列為了正式規(guī)范,統(tǒng)一了用法,原生提供了Promise對象。接下來通過本文給大家介紹Promise的介紹及基本用法,感興趣的朋友一起看看吧
    2021-10-10
  • 兩行代碼輕松搞定JavaScript日期驗證

    兩行代碼輕松搞定JavaScript日期驗證

    兩行代碼輕松搞定JavaScript日期驗證,通過實例化Date對象來生成一個合法的日期,驗證日期是否合法,感興趣的小伙伴們可以參考一下
    2016-08-08

最新評論

石阡县| 庆阳市| 阳城县| 南陵县| 社旗县| 盈江县| 平邑县| 久治县| 钦州市| 迁安市| 北辰区| 大连市| 故城县| 嘉兴市| 五常市| 乌鲁木齐县| 高碑店市| 莆田市| 万安县| 九江市| 桦甸市| 玛曲县| 阿图什市| 阿坝县| 鹤峰县| 宜春市| 房产| 镇安县| 基隆市| 达孜县| 淅川县| 桂阳县| 镇平县| 威信县| 三江| 鄂州市| 和平区| 新干县| 灵宝市| 成都市| 澄城县|