久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

JavaScript專題(二):深入理解iframe

 champion999 2014-04-02

一 目的

  iframe是網(wǎng)頁布局中重要的元素,是解決一些常見前端問題的必修課,,而iframe總是讓人捉摸不透,,不好掌握。關(guān)于iframe,,有很多問題我們必須要徹底弄清,。筆者累一年經(jīng)驗,3天構(gòu)思,,欲闡述關(guān)于iframe的那些事,。雖然都是常見的知識,但是很少有人能深入理解,,靈活使用,。

  iframe在布局,無刷新方面都有極其中重要,,不可替代的地位,。雖然現(xiàn)在流行DIV布局,但是有時還得用iframe布局,;雖然2005年流行使用AJAX進(jìn)行無刷新,,但是在特效情況下還得使用iframe;在flash動畫內(nèi)嵌html時,,iframe更是必不可少,。本文的主要目的就是針對這些問題展開討論,并且總結(jié),。本文目的有:

  1.iframe的基礎(chǔ),深入理解frame是何物,,屬性該如何設(shè)置,。

  2.iframe自適應(yīng)高寬,即ifrmae在布局方面的應(yīng)用,。

  3.iframe的表單無刷新,,iframe在上傳文件時的無刷新作用,。

  4.iframe的跨越問題。

  5.iframe與jQuery,。

  請不要懷疑iframe的缺點,,不要擔(dān)心iframe的使用量。各大網(wǎng)站都在使用,,淘寶,,百度,新浪,,博客園,,都能找到iframe的蹤跡。

二 什么是iframe

  iframe即內(nèi)聯(lián)框架,。不同于frame,,frame與frameset綜合使用,成為幀,,框架集,。frame已經(jīng)不大使用了,說白了,,frame是僵硬的疊加,,iframe是內(nèi)聯(lián)的,不是簡單的疊加,,而是承前啟后,,對于外圍的頁面,iframe是一個普通的元素,,對于iframe里面的內(nèi)容,,又是一個五臟俱全的頁面。iframe的寫法是:

  <iframe id="coreIframe" name="coreIframe" src="/blank.html"></iframe>

可以看出,,iframe毫無神秘可言,,就是一個普通的元素,與span,div一樣,。那么,,iframe是內(nèi)聯(lián)元素還是塊元素?第一,,iframe可以設(shè)置width,height并且有效,。第二,iframe像普通文本一樣不會換行,??磮D:

 

  由此兩點,可以判定:

  iframe是inline-block元素,。

  iframe的基本屬性與其他元素一樣,,有樣式的,,也有特有的。其中,,關(guān)于樣式的完全可以使用css設(shè)置,。有些屬性不建議使用,也沒有必要使用,,下面列出iframe的常用屬性:

  1.frameborder:是否顯示邊框,,yes,no。

  2.height:框架作為一個普通元素的高度,,建議在使用css設(shè)置,。

  3.width:框架作為一個普通元素的寬度,建議使用css設(shè)置,。

  4.name:框架的名稱,,window.frame[name]時專用的屬性。

  5.scrolling:框架的是否滾動,。yes,no,auto,。

  6.src:內(nèi)框架的地址,可以使頁面地址,,也可以是圖片的地址,。

比較特別的iframe屬性只用三個:frameborder,scrolling,src,所有的iframe幾乎都要指定,。典型的iframe元素一般是:

  <iframe id="mainIframe" name="mainIframe" src="http://www.baidu.com" frameborder="0" scrolling="auto" ></iframe>

  <iframe id="mainIframe" name="mainIframe" src="blank.html" frameborder="0" scrolling="auto" ></iframe>

并且使用css設(shè)置其樣式:

  #mainIframe{

    width:1000px;

    height:800px;

    border:1px blue solid;

    margin-left:10px;

  }

  上面都是將iframe作為一個普通元素看待,,看的出來,iframe就是一個普通的元素,。

三 iframe自適應(yīng)高度

  iframe的自適應(yīng)高寬是個不小的難題,。所謂的iframe高度自適應(yīng),一般就是要嵌入的iframe符合以下要求:

  1.內(nèi)嵌的iframe,,要適應(yīng)父頁面,,當(dāng)需要滾動條,滾動條顯示,,不需要時,,滾動條不顯示。

  2.當(dāng)父頁面窗口發(fā)生變化時,,iframe也會變化,。

  3.當(dāng)iframe的內(nèi)容變化時,其滾動條也要適應(yīng),。

  首先,,不要盲目的去關(guān)注這個命題,而應(yīng)該理解,,哪些東西影響了iframe的高寬,,iframe在頁面中如何表現(xiàn)。如果對頁面的高度,,寬度不不夠了解,,經(jīng)常糊涂,請看筆者的另兩篇文章,,頁面的高度發(fā)微,,頁面的寬度發(fā)微。要是做到高寬自適應(yīng),,無非是在父頁面的窗口大小,,文檔大小,iframe元素的高寬,,子頁面的窗口大小,,文檔大小,等方面下功夫,。首先,,父頁面是我們編寫的,窗口大小由用戶即瀏覽器決定,,文檔大小由頁面內(nèi)容決定,,而子頁面的文檔大小,我們也許不能決定,,如果是跨越的,。幸好,iframe的自適應(yīng)高寬無需使用文檔大小,。而只需要窗口大小和iframe元素大小,,其中窗口大小是只讀的,所以只需要關(guān)心iframe元素大小即可,。

  頁面的加載順序很重要,,一般的,我們使用$(function(){})或window.onload等函數(shù)初始化頁面,,此時,,頁面中所有元素已經(jīng)加載完畢。如果內(nèi)嵌了iframe,,同樣道理,,iframe作為頁面的一個普通元素,也是先加載完畢,,就是說,,父頁面的$(function(){})執(zhí)行時,iframe的所有內(nèi)容已經(jīng)加載完畢了。下面是順序圖:

  

由此,,完全不用再iframe里設(shè)置,,全部js可以在父頁面完成,而且只要調(diào)節(jié)iframe元素的width,height,scrolling即可,。一般的,,自適應(yīng)iframe,將iframe得scrolling設(shè)置為auto即可。為了讓頁面上只顯示一個滾動條,,還要隱藏父頁面的滾動條,。那么總結(jié)起來,要注意以下事項,,即可完成iframe的自適應(yīng)高寬,,而且不用關(guān)心跨域,跨瀏覽器等問題:

  1.隱藏父頁面的(一般為top)滾動條,。

  2.設(shè)置iframe這個元素的width,height為某個高寬,,scrolling為auto。

  3.設(shè)置$(window).resiez(),,或$(#XXX).resize(),,使容納iframe元素的節(jié)點在大小變化時,改變iframe的width,height以適應(yīng),。

通過以上設(shè)置,,完全可以做到iframe自適應(yīng),。此間,,不用對iframe中的子頁面做任何設(shè)置,,只需要在父頁面完成所有程序。之所以這樣,,都?xì)w功于iframe的srcolling=auto這句程序最后起作用,。示例如下:

  1.全屏無邊框:http://www./html/demo/javascript/js_iframe_autoHeight_border.html

  2.有邊框效果更明顯:http://www./html/demo/javascript/js_iframe_autoHeight_border.html

四 iframe與無刷新

  iframe與無刷新有悠久的關(guān)系。筆者不知道ajax以前是如何無刷新的,,也許是通過iframe,。具體可以參看筆者的另一篇文章:form的target屬性。iframe實現(xiàn)無刷新的原理就是在A頁面的表單提交數(shù)據(jù)到服務(wù)器,,并且指定target屬性為B頁面,,服務(wù)器返回內(nèi)容到B頁面,然后在B頁面中調(diào)用JavaScript程序,,來刷新A頁面,,完成一次請求。如果在此過程中,,B為A頁面的一個iframe頁面,,而且一直不顯示,,則對用戶來說,就是一個無刷新,。

  這種無刷新比ajax要麻煩,,但是同樣意義非凡。在上傳文件時,,ajax是無法提交的,,此時iframe似乎成了不二選擇。

  但是有一個要求,,就是AB頁面同域。因為在整個過程中,,會在B頁面來調(diào)用A頁面的js對象的方法或函數(shù),,就必須保證兩個頁面同域。否則操作非法,。這種無刷新在網(wǎng)上隨處可見,,淘寶上很多。

五 iframe的跨域

    這里主要講述iframe內(nèi)html頁面的歸屬,。iframe內(nèi)的html頁面可以有兩個來源,,本域內(nèi)的頁面,外部引用的頁面,。我們知道,,為了安全,js是不能訪問其他頁面的對象和方法的,,除非兩個頁面同域,。這是可以理解的,因為你不可能希望別人修改引用你的網(wǎng)站時還修改你的網(wǎng)站,。

  如果有兩段代碼如下:

   A:<iframe id="mainIframe" name="mainIframe" src="/main.html" frameborder="0" scrolling="auto" ></iframe>

   B:<iframe id="mainIframe" name="mainIframe" src="

我們該如何取iframe和子頁面,?有以下方法代碼:

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

  var mainIframeW = window.frames["mainIframe"];

  var mainDocument = mainIframeW.document;

分別對應(yīng)到AB頁面是什么意思呢?我想很多人都不是很清晰,。下面表格說明:

  mainIframe maiIframeW mainDocument
A代碼 頁面的普通元素,,可以通過該對象設(shè)置iframe的width,height等一個普通元素的屬性,DOM對象 子頁面的window對象引用,BOM對象 子頁面window對象的文檔模型document,,可以在父頁面對子頁面改寫
B代碼 同A代碼,,DOM對象 子頁面的window對象引用,BOM對象 子頁面window對象的文檔模型document,,不可以在父頁面改寫

  有一點要說明,,如果兩個頁面有一個是其中一個的二級域名,可以通過js的方式設(shè)置為同域名:document.domain = xxx.xx,。

iframe與jQuery

  iframe與jQuery的關(guān)系十分簡單,。只要理解了一點,即可完全搞清楚:jQuery,$是頁面上的一個js對象,即window的一個普通對象,,獲得這個jQuery對象后,,就可以進(jìn)行操作了。jQuery對象屬于頁面,,如果要訪問iframe頁面的jQuery對象,,首先要保證能夠訪問子頁面的的對象,就是要滿足父頁面與子頁面同域,。當(dāng)然iframe頁面也要引入jquery.js,。通常是以下寫法:

  1.在父頁面訪問子頁面的jQuery對象。window.frames["xxxIframe"].$("#top"),,表示訪問子頁面的top元素,。如果拆分開來,會更容易理解即:

  var iframe$ = window.frames["xxxIframe"].$;

  iframe$("#top");

  這里iframe$就相對于$,。

  2.在子頁面訪問頁面的jQuery對象,。parent.$("#top")。拆分開來就是:

  var parent$ = parent.$;

  parent$("#top");

  如果是頂層框架,,就是top.$("#top"),。

 

總結(jié)

  關(guān)于iframe的主要知識點就這么多,如果不夠詳細(xì),,請留言,。總結(jié)如下:

  1.iframe就是一個普通的html元素,,同樣可以通過css設(shè)置其樣式,,而起iframe還是一個inline-block元素。

  2.只要掌握了父頁面和子頁面的渲染順序,,就能很容易掌握iframe的自適應(yīng)高寬,。其實很簡單,在父頁面設(shè)置iframe元素的width,height即可,,并且scrolling為auto,。

  3.iframe的一個獨特用處是,對含有文件上傳表單的無刷新提交,。

  4.注意如果iframe的內(nèi)容是外部網(wǎng)址內(nèi)容,,則不能操作其document。

                                            方勁松 南京焦點科技 寫于鼓樓清涼山 2012-8-19

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多