成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JS實現跨域訪問iframe里的dom

開發 前端
這里向大家描述一下JS如何跨域訪問操作iframe里的dom,通過Javascript的幫忙我們可以像后臺一樣動態加載操作iframe對象屬性src指向的html頁面的內容。

本文和大家重點討論一下JS跨域訪問操作iframe里的dom,很多人一直都有個想法,要是可以隨心所欲的操作iframe就好了。這樣靜態頁面也就有了相當于后臺動態頁面php,jsp,asp中include,require實現統一多頁面布局的能力。

JS跨域訪問操作iframe里的dom

通過Javascript的幫忙我們可以像后臺一樣動態加載操作iframe對象屬性src指向的html頁面的內容。這樣的操作需要提供兩個頁面,一個頁面是iframe所在頁面(頁面名稱:iPage.html),另一個頁面是iframe屬性src指向頁面(頁面名稱:srcPage.html)。

◆iPage.html,<body>里dom:

  1. <iframeidiframeid=“iId“name=“iName“  
  2. src=“srcPage.html“scrolling=“no“frameborder=“0“> 
  3. </iframe> 
  4.  

◆srcPage.html,<body>里dom:

  1. <h1>妹妹的一天</h1> 
  2. <p>早上吃早點,中午約會吃飯,下午K歌</p> 

下面討論IE下JS是怎么操作以上兩個頁面,再討論firefox的做法,最后給出兼容IE,firefox瀏覽器操作iframe對象的方法。

一、IE下訪問操作iframe里內容

大家都知道iframe是非標準html標簽,它是由IE瀏覽器推出的多布局標簽,隨后Mozilla也支持了這個標簽。(閑話,嘿嘿)

1.IE通過document.frames["IframeName"]獲取它,例子:我們在iPage.html里輸出srcPage.html里h1的內容,JS如下:

  1. alert(document.frames["iName"].document.  
  2. getElementsByTagName(‘h1‘)[0].firstChild.data); 

你會發現這樣在頁面里加入代碼,好像并沒有輸出想要的東東,為什么呢?這個我也沒有搞清楚,只是習慣性的加入了window.onload就有輸出了(注:JS代碼都寫到這個事件里去),知道的人士可否告訴我下。why?更改之后代碼IE下有了輸出,firefox下document.frames沒有定義錯誤提示:

  1. window.onload=(function(){  
  2. alert(document.frames["iName"].document.  
  3. getElementsByTagName(‘h1‘)[0].firstChild.data);  
  4. }); 

2.IE另一種方法contentWindow獲取它,代碼:

  1. window.onload=(function(){  
  2. variObj=document.getElementById(‘iId‘).contentWindow;  
  3. alert(iObj.document.  
  4. getElementsByTagName(‘h1‘)[0].firstChild.data);  
  5. }); 

此方法經過IE6,IE7,firefox2.0,firefox3.0測試都通過,好事啊!嘿嘿。(網上一查,發現MozillaFirefoxiframe.contentWindow.focus緩沖區溢出漏洞,有腳本注入攻擊的危險。

后來聽說可以在后臺防止這樣的事情發生,算是松了口氣。不過還是希望firefox新版本可以解決這樣的危險。)

3.改變srcPage.html里h1標題內容,代碼:

  1. iObj.document.getElementsByTagName(‘h1‘)[0].  
  2. innerHTML=‘我想變成她一天的一部分‘; 

通過contentWindow后訪問里面的節點就和以前一樣了。

二、firefox下訪問操作iframe里內容

Mozilla支持通過IFrameElmRef.contentDocument訪問iframe的document對象的W3C標準,通過標準可以少寫一個document,代碼:

  1. variObj=document.getElementById(‘iId‘).contentDocument;  
  2. alert(iObj.getElementsByTagName(‘h1‘)[0].  
  3. innerHTML=‘我想變成她一天的一部分‘);  
  4. alert(iObj.getElementsByTagName(‘p‘)[0].firstChild.data); 

兼容這兩種瀏覽器的方法,現在也出來了,就是使用contentWindow這個方法。

操作iframe是不是可以隨心所欲了呢?如果還覺得不爽,你甚至可以重寫iframe里的內容。#p#

三、重寫iframe里的內容

通過designMode(設置文檔為可編輯設計模式)和contentEditable(設置內容為可編輯),你可以重寫iframe里的內容。代碼:

  1. variObj=document.getElementById(‘iId‘).contentWindow;  
  2. iObj.document.designMode=‘On‘;  
  3. iObj.document.contentEditable=true;  
  4. iObj.document.open();  
  5. iObj.document.writeln(‘<html><head>‘);  
  6. iObj.document.writeln(‘<style>body{background:#000;  
  7. font-size:9pt;margin:2px;padding:0px;}</style>‘);  
  8. iObj.document.writeln(‘</head><body></body></html>‘);  
  9. iObj.document.close(); 

firebug測試以上代碼性能,如圖

注釋掉

  1. iObj.document.designMode=‘On’;  
  2.  
  3. iObj.document.contentEditable=true;  
  4.  

 結果如圖:

效果沒有變,時間效率是注釋前的將近三倍。嘿嘿。那兩個對象是參考網絡一些人的寫法,重寫iframe里內容,其實沒有必要用designMode和contentEditable,除非有其他的需求。

四、iframe自適應高度

有了上面的原理要實現這個相當簡單,就是把iframe的height值設置成它里面文檔的height值就可以。代碼:

  1. window.onload=(function(){  
  2. variObj=document.getElementById(‘iId‘);  
  3. iObjiObj.height=iObj.  
  4. contentWindow.document.documentElement.scrollHeight;  
  5. }); 

【編輯推薦】

  1. JS控件在IFrame中的應用
  2. JS方法在iframe父子窗口間的調用
  3. C#代碼與JavaScript函數的相互調用
  4. JavaScript函數中arguments對象
  5. Javascript中CSS屬性float特殊寫法

 

 

責任編輯:佚名 來源: AlipayUED
相關推薦

2024-08-02 08:21:52

Spring項目方式

2021-06-15 07:32:59

Cookie和Sess實現跨域

2011-04-21 16:09:17

JavascriptCookie

2010-09-28 12:59:45

JavaScriptDOM

2019-11-11 17:34:16

前端開發技術

2015-04-24 10:37:40

Web安全瀏覽器跨域訪問

2017-03-12 19:51:38

js實用跨域

2010-01-22 17:12:08

VB.NET訪問Ifr

2009-05-21 14:47:38

WEB開發JsonAjax

2014-08-19 10:36:02

AngularCORS

2018-01-18 14:50:56

Nginx實現CDSW

2020-12-31 08:14:39

VueAxiosJavaScript

2010-02-24 10:55:01

WCF跨域訪問

2010-07-30 12:40:00

Flex跨域訪問

2011-11-07 11:15:31

2010-09-28 11:22:18

Html DOM樹

2021-04-27 15:20:41

人工智能機器學習技術

2016-11-04 20:02:37

Apache

2010-10-08 10:15:34

IFrameJS控件

2019-04-10 10:32:16

CORSNginx反向代理
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久久久免费看 | 成年人网站免费视频 | 欧美精品一区二区三区视频 | 久久国产视频网站 | 国产精品美女久久久av超清 | 欧美二区在线 | 日韩a在线 | 亚洲视频在线观看 | 在线一区观看 | 国产中的精品av涩差av | 久久久久久国产精品三区 | 美女国产 | www国产成人免费观看视频,深夜成人网 | 久久99深爱久久99精品 | 激情五月婷婷综合 | 极品久久| 欧美激情视频网站 | 亚洲精品一区二区三区 | 亚洲444kkkk在线观看最新 | 欧美日韩在线免费观看 | 欧美视频免费在线 | 亚洲国产欧美91 | 亚洲欧美日韩在线 | 日韩av在线中文字幕 | 久久久久国产精品 | 亚洲成人综合社区 | 精品国产区| 国产99久久 | 日日想夜夜操 | 国产精品久久久亚洲 | 久久久久久久久久久丰满 | 夜夜骚| 涩涩鲁亚洲精品一区二区 | 麻豆亚洲| 欧美综合久久 | 狠狠亚洲 | 成人精品一区二区三区中文字幕 | 精品久久久久一区 | 国产成人在线观看免费 | 香蕉久久久 | 黄色片在线 |