Hopes

          Start Here..

           

          VS2005里Frameset的使用方法

          VS2005里Frameset的使用方法
          一. 建立Frame 
          1.建立一個基本的Frame 
          2.建立frame之間的鏈接 
          3.美化你的Frame 
          4.浮動(float)Frame 
          二. 使用Frame 
          1.當我們使用Frame 
          2.設計一個含框架(Frame)的站點 
          三. 關于Frame的腳本 
          1.Frame導航的腳本 
          2.動態Frames腳本 
          3.Frame窗口間的腳本影響 
          4.浮動Frame的腳本 
          5.預防腳本出錯 
          ----------------------------------------------------- 
          前言 
          Frame是HTML中用來設置框架的標簽。框加可以在一個頁面里開設多個窗口,以滿足不同的設計需要,例如:將網站的菜單導航部分固定在一個窗口中,可以減少相同頁面下載時間。從Navigator 2.0允許使用Frame標簽開始,現在大部分的瀏覽器都支持frame標簽,并且已經成為HTML 4.0的標準規范。我們的文章分三部分: 
          一. 建立Frame 
          學習Frame標簽的最好辦法是直接建立Frame網頁。 
          二. 使用Frame 
          熟練掌握Frame,可以成為你設計制作的得力助手。使用不好,則會產生麻煩討厭的結果。我們將幫助你正確使用Frame,如果你已經建立了Frame網頁,我們可以提供關于更好的組織構架frame的一些建議。 
          三. 關于Frame的腳本 
          已經有相當多的關于Frame的控制腳本,可以幫助你建立多樣的,動態的Frame。 
          ----------------
          一. 建立Frame
          ----------------
          1.建立一個基本的Frame
          一個frame頁的HTML原代碼和普通的網頁代碼不完全相同。它也樣有<HTML>標簽和<HEAD>標簽,可以包含網頁標題和一些腳本或者meta標簽,但是因為Frame中顯示的是其他頁面,所以在內容上,使用<FRAMESET>替代<BODY>標簽。
          <FRAMESET>標簽中用來橫向,縱向劃分瀏覽器窗口的屬性是<rows>和<cols>,通過它們可以設置橫向或縱向分割的尺寸。設置方法有三種:1.使用精確的pix數值,2.使用相對百分比,3.使用*號。例如:
          cols="80,20%,*" 是指縱向分80 pixels, 瀏覽器窗口寬度的20%, 和剩余的部分三個窗口 
          rows="25%,75%" 是指將瀏覽器窗口分為上下兩個窗口,上面占25%,下面占75%
          rows="*,3*" 和上一句的意思一樣,分成上面1/4,下面3/4的兩個窗口
          在<FRAMESET>和</FRAMESET>標簽之間,你需要為每一個窗口設置<FRAME>標簽,標簽里設置該窗口的名稱和所顯示的頁面URL。注意:窗口名稱要不同,便于將來對該窗口進一步操作。例如:
          <HTML>
          <HEAD>
          <TITLE>簡單的frameset</TITLE>
          </HEAD>
          <FRAMESET cols="40%,60%" rows="2*,*">
          <FRAME name="TopLeft" src="red.htm">
          <FRAME name="TopRight" src="green.htm">
          <FRAME name="BotLeft" src="blue.htm">
          <FRAME name="BotRight" src="white.htm">
          </FRAMESET>
          </HTML> 
          在上面的例子中,<FRAMESET>中同時使用'rows'和'cols'屬性建立一個四方格樣子的框架,frame的設置默認的是從左面到右面,從上面到下面。
          要制作非格子狀的框架,你可以嵌套<FRAMESET>,在一個窗口中再劃分出子窗口,只要用<FRAMESET>代替<FRAME>標簽。同樣,也可以在子窗口里再設置它的rows,cols,建立子窗口的子窗口。例如:下面這段代碼顯示了三層<FRAMESET>嵌套的四個窗口:
          <FRAMESET rows="105,*">
          <FRAME name="adbanner" src="ad.html">
          <FRAMESET cols="40%,60%">
          <FRAME name="left" src="red.htm">
          <FRAMESET rows="*,*">
          <FRAME name="top" src="blue.htm">
          <FRAME name="bottom" src="white.htm">
          </FRAMESET>
          </FRAMESET>
          </FRAMESET> 
          2.建立frame之間的鏈接
          在一個含框架的靜態頁面中,點擊某個窗口中的鏈接來調用新的頁面,新頁面只會顯示在這個窗口中。但是,如果我希望點擊一個窗口中的鏈接,內容顯示在另外一個窗口內,應該怎樣做呢?就象常見的點擊左列菜單,右面主窗口中顯示變化內容。你可以這樣實現,在鏈接標簽<a>的中增加target屬性來指定要鏈接Frame的name。用target屬性可以指定當前瀏覽器窗口中任何存在的frame頁。如果該frame頁不存在,將會打開一個新窗口。
          例如:你現在有一個簡單的含左右兩個窗口的Frame頁面,文件名為home.html,原代碼為:
          <HTML>
          <HEAD><TITLE>My home page</TITLE></HEAD>
          <FRAMESET cols="115,*">
          <FRAME src="menu.htm">
          <FRAME name="content" src="main.htm">
          </FRAMESET>
          </HTML> 
          你需要點擊左列窗口menu.htm中的鏈接,變化內容顯示在右列名為content的窗口中,那么menu.htm的代碼可以這樣寫:
          <HTML><HEAD></HEAD>
          <BODY>
          <A href="main.htm" target="content">Main page</A><P>
          <A href="menu1.htm" target="content">menu1</A><P>
          <A href="menu2.htm" target="content">menu2</A><P>
          <A href="menu3.htm" target="_blank">menu3</A>
          </BODY></HTML> 
          其中target="content"就是指將鏈接的內容顯示在name為content的窗口中。最后的target="_blank"是target標簽的保留參數,意思是將鏈接打開在一個新窗口中。同樣的保留參數還有:
          "_parent"是指將鏈接內容顯示在父窗口中;
          "_top"是指將鏈接內容顯示在整個窗口中;
          "_self"是指將鏈接內容顯示在自己當前的frame窗口中。
          target屬性同樣可以用在map圖的<AREA>標簽中,一張圖的不同部分可以鏈接到不同的frame窗口中,例如:
          <AREA shape=circle coords="75,75,50"
          href="main.htm" target="content"
          alt="Main page"> 
          如果一個頁面內大部分或者所有的鏈接都指向同一個frame窗口,你可以用<BASE>標簽在此頁的<HEAD>區設置默認的鏈接frame窗口,例如:<BASE target="content">,如果有特殊的鏈接,則單獨設置。
          注意:<FRAME>標簽中必須設置src屬性,如果你希望初始頁是空白頁,必須在src中指定一個空白頁。
          3.美化你的Frame
          Frame的普通設置已經沒有問題了。瀏覽器開發商又為<FRAME>增加了許多屬性來幫助網頁設計師美化框架,以滿足不同的設計需求。
          默認的,Frame的不同窗口中間有凸起的邊框為界。現在你可以去掉這些邊框,使不同窗口完美的結合在一起,看上去象是一個單獨的完整頁面。在HTML 4.0中,在<FRAME>標簽中設置frameborder=0屬性,就可以消除邊框。Netscape3.0和IE3.0以上版本瀏覽器都支持這個屬性。你如果需要保留邊框,可以將frameborder設置為1。
          不同的瀏覽器還提供一些特有的frame屬性,用來設置彩色的邊框。因此為了確保frame的框架不被顯示出來,你還必須在<FRAMESET>標簽里增加兩個屬性:針對InternetExplorer瀏覽器設置framespacing=0,針對NC和Opera瀏覽器設置border=0。例如:
          <HTML>
          <HEAD><TITLE>My home page</TITLE></HEAD>
          <FRAMESET cols="115,*" framespacing=0 border=0>
          <FRAME src="menu.htm" frameborder=0
          noresize scrolling=no>
          <FRAME name="content" src="main.htm"
          frameborder=0>
          </FRAMESET>
          </HTML> 
          在我們上面的例子中,你會注意到有更多的屬性需要設置。例如你可以用鼠標拖動隨意改變frame窗口的大小。我們可以用'noresize'屬性來鎖定這一功能。同樣的可以用'scrolling=no'屬性來禁止滾動條的出現,如果需要滾動條可以設置為'scrolling=yes',默認設置是滾動條在內容超出窗口尺寸時自動出現。
          還有兩個<FRAME>屬性:'marginheight'和'marginwidth',設置確切的pixel數值可以設定頁面內容和邊框的距離。通常我們設置為0,如果不設置,它的屬性將采用瀏覽器的默認設置。
          4.浮動(float)Frame
          目前,浮動Frame只有IE3.0以上版本支持,然而,它們已經被收錄到HTML 4.0標準規范中。在NC5.0以上版本也開始支持這一效果。
          和一般Frame不同,浮動Frame類似一個物件直接包含在普通頁面里,看上去更象是一張圖片,一個java applet。設置浮動frame使用<IFRAME>標簽,<IFRAME>標簽有著<FRAME>標簽的大部分屬性,象:name,src,marginwidth,marginheight, frameborder, 和scrolling,但是它又有類似圖片的height,width和align屬性。(IE瀏覽器甚至支持非標準的hspace和vspace屬性。)
          浮動frame和標準frame有一樣的target屬性規則:如果你想鏈接到它的父窗口,同樣可以直接target父窗口的名稱,這個規則適用于浮動Frame在其他frame窗口中。例如:
          <IFRAME name="floater" src="start.htm"
          width=150 height=200 hspace=10 align=left>
          <p>你的瀏覽器不支持IFRAME</p>
          </IFRAME><BR>
          <A href="one.htm"
          target="floater">顯示one.htm</A><P>
          <A href="two.htm"
          target="floater">顯示two.htm</A><P>
          <A href="start.htm"
          target="floater">返回start.htm</A> 
          注意:<IFRAME>也是圍堵標簽,需要以</IFRAME>標志結束。如果瀏覽器不支持<IFRAME>,所有放在<IFRAME>和</IFRAME>之間的內容將被忽視,上面的例子中你只能看到<IFRAME>下面的連接和其中的文字。
          浮動frame同樣支持用百分比或者具體數值設置高和寬。
          ----------------
          二. 使用Frame
          ----------------
          1.當我們使用Frame
          使用Frame的目的是劃分窗口,通過這個方法,可以只改變頁面的部分內容或者使頁面的一部分可以卷動。設計師們常常使用Frame來設計工具(菜單)條,使菜單部分不變,內容部分隨菜單的點擊而變化。這樣可以減少下載文件的大小,因為頁面中相同的菜單部分可以不需要重新下載。
          使用Frame,大量的小頁面文件增加了站點管理的復雜性和層次。每個鏈接你都需要考慮是否連接到正確的頁面,正確的窗口。
          另一個frame應用問題是:大部分瀏覽器的bookmark只支持最初的框架(最外面的頁面),如果你進入frame中多層后,希望bookmark子窗口的頁面,你得到的只能是最初的Frame頁面。這個限制使讀者很難直接返回到一個特定的子頁面。然而,如果你的站點信息組織得很好,導航清晰,層次不深,Frame可以工作得很好。即使訪問者必須點擊多層,也可以得到高效簡捷的導航。
          使用frame不單單為了導航方便,它同樣可以用來建立動態的交互性頁面,當前大部分瀏覽器都支持這個功能。它可以和javascript配合建立復雜的多文件結構。
          2.設計一個含框架(Frame)的站點
          很多流行的網頁制作工具可以幫助你方便的建立Frame頁面,幫助你設置正確的鏈接target。但即使你是手工寫你的frame站點,建立和管理frame,導航都是很容易的。你甚至可以為不支持frame瀏覽器的用戶提供可以瀏覽的頁面內容。
          在常見的'菜單-內容'框架結構中,將導航菜單和內容放在不同的兩個frame窗口中,點擊菜單,內容顯示在另外窗口中。同時也可以設置多級菜單,點擊主菜單,在同一個frame窗口中顯示子菜單,點擊子菜單,內容顯示在另外的內容窗口中。在子菜單中點擊返回,可以回到上一級的主菜單。
          用這種方法也可以為不支持Frame的瀏覽器制作導航。因為Frame頁面不需要<BODY>標簽,支持frame的瀏覽器在讀到<BODY>標簽時會忽略跳過;而不支持frame的瀏覽器會忽視<FRAMESET>標簽去處理<BODY>的內容。根據這個特性,我們可以同時設置<FRAMESET>和<BODY>標簽內容,這樣可以使各種瀏覽器的用戶都可以看到正確的內容。例如:
          <HTML><HEAD>
          <TITLE>Welcome to my site!</TITLE>
          </HEAD>
          <FRAMESET cols="150,*">
          <FRAME name="menu" src="menu.htm">
          <FRAME name="content" src="intro.htm">
          </FRAMESET>
          <BODY>
          Welcome to my site.<P>
          <A href="intro.htm">Introduction</A>
          <A href="products.htm">Products</A>
          <A href="reviews.htm">Reviews</A>
          </BODY></HTML> 
          在HTML 4.0標準規范中提供一個<NOFARMES>標簽用來包住支持frame瀏覽器忽略的內容。例如<BODY>中的內容。但是Navigator 4.0和以下版本不支持<NOFRAMES>標簽,所以還是需要用上例的方法來設置frame頁面。 
          ----------------
          三. 關于Frame的腳本
          ----------------
          1.Frame導航的腳本
          當你熟練掌握了HTML,你很快就會想知道:如何點擊一個連接同時改變兩個Frame窗口的內容。這就需要特定的javascript腳本來實現。
          每個窗口物件都有一個frames數組特性,在一個普通的網頁中,這個數組是空的,長度為0;在含frame窗口的頁面中,另外設有一個frame的索引來排列各子窗口的順序(其中設置frameset的頁面是各子窗口頁面的父窗口)。所以,你可以在父窗口中用self.frames[2]定義第三個窗口(注意,索引數值是從0開始的);或者在其它子窗口中用parent.frames[2]來定義第三個窗口。
          在javascript中,每個窗口內的物件都可以調用這個窗口的特性,例如方法,事件,屬性,包括frames數組,所以改變一個子窗口中的內容就非常簡單了,只需要修改它的location.herf屬性。舉例說明:下面建立一個上下兩窗口的框架,其中下面的窗口又劃分為三個一樣的frame子窗口:
          <FRAMESET rows="60%,40%">
          <FRAME name="link" src="link.htm">
          <FRAMESET cols="*,*,*">
          <FRAME name="blank1" src="blank.htm">
          <FRAME name="blank2" src="blank.htm">
          <FRAME name="blank3" src="blank.htm">
          </FRAMESET>
          </FRAMESET> 
          要點擊上面窗口link.htm中的鏈接,同時改變下面窗口中三個子窗口內容,可以加入下面的功能代碼并將鏈接設置為href="java script:navAll()":
          <SCRIPT language="JavaScript"><!--
          function navAll() {
          parent.frames[1].location.href="red.htm";
          parent.frames[2].location.href="blue.htm";
          parent.frames[3].location.href="white.htm"; }
          // --></SCRIPT> 
          如果你的frame頁面中已經包含其他的jacascript腳本,它們也將照常工作。注意很重要的一點,你的<FRAME>標簽中必須設置src屬性,否則腳本無法正常工作。
          2.動態Frames腳本
          如果一個frame內容只有少量的信息,采用腳本來顯示內容的效率常常比獨立的HTML網頁高,因為普通HTMl頁面必須從服務器上重新調閱,而腳本可以直接在客戶端生成一些簡單的頁面。
          用這種方法你可以寫任何內容到任何窗口,甚至整個frame文檔。不同之處就是你可以寫不同的內容在同樣的窗口,而不需要使用任何DHTML。
          假設你想放自己部門員工的一組照片在一個Frame窗口中,鼠標點擊照片時,在照片下方的frame窗口中顯示他們的名稱,職務。那么你可以用下面的一段javascript腳本來代替建立獨立的網頁。首先建立一個數組,用來存放員工的名稱和職務:
          empID = new Array();
          empID[0] = 'Dana, CEO';
          empID[1] = 'Tom, senior editor';
          empID[2] = 'Percy, head designer';
          empID[3] = 'Mike, astrologer';
          然后在照片上建立map圖,使不同的鏈接區域<AREA>鏈接到showMe(n)功能,以顯示不同人的信息。就象下面代碼表示的,我們用javascript在frame窗口中寫入一個簡單的頁面:
          part1 = '<HTML><HEAD></HEAD>';
          part1+= '<BODY bgcolor=#ffffff><DIV align=center>';
          part2 = '</DIV></BODY></HTML>';
          function showMe(n) {
          parent.frames[1].document.open();
          parent.frames[1].document.write(part1);
          parent.frames[1].document.write(empID[n]);
          parent.frames[1].document.writeln(part2);
          parent.frames[1].close();
          用腳本生成新頁面并不一定需要類似上面的靜態數組,它們也可以隨機生成或者由客戶定制。
          3.Frame窗口間的腳本影響
          單獨使用javascript,窗口間的影響是有限的,你只能通過創建它的窗口頁面來檢測或訪問這個窗口。但是使用另外的方法:利用Frame的特性,窗口間的javasript功能和變量可以互相訪問和操作。例如,如果第三個frame子窗口的頁面代碼中有sayGobble(vol)功能函數,這個功能相對其它子窗口的調用格式為parent.frames[2].sayGobble(vol),同樣的,父窗口中的變量可以在子窗口中聲明為parent.myName='Imelda'。
          在一個靜態的frame框架中的功能函數和變量,可以讀取或寫入到其他的frame頁面。這個功能不但可以有效的利用通用的功能,更加可以維持數據到令一個框架窗口。
          下面的框架頁面只包含一個frame頁面--query.htm,并聲明了變量myword:
          <HTML><HEAD>
          <TITLE>Passing data</TITLE>
          <SCRIPT LANGUAGE="JavaScript"><!--
          myWord="";
          //--></SCRIPT>
          </HEAD>
          <FRAMESET rows="*,1" FRAMEBORDER=no>
          <FRAME name="active" src="query.htm">
          <FRAME name="dummy">
          </FRAMESET>
          </HTML> 
          頁面query.htm有一個文本輸入框和一個指向result.htm的鏈接。鏈接的鼠標點擊事件將把輸入的內容寫入到父窗口的myWord變量中,就向這樣:
          <HTML><HEAD></HEAD>
          <BODY>
          <FORM name="myForm">
          <INPUT type=text size=12 name="myText">
          <P>
          <AonClick="parent.myWord=myText.value"
          href="result.htm">點擊這里看你的輸入文字用黃色字體顯示在藍色背景上</A>
          </FORM>
          </BODY></HTML> 
          新的頁面--result.htm,刷新并寫入query.htm中的myWord變量內容:
          <HTML>
          <HEAD></HEAD>
          <BODY bgcolor=#0000cc vlink=#99ffff>
          <FONT size=+3 color=#ffff00>
          <SCRIPT language="JavaScript"><!--
          document.write(parent.myWord);
          //--></SCRIPT>
          </FONT><P>
          <A href="query.htm">重新再來一次</a>
          </BODY></HTML> 
          這個簡單的例子有著廣泛的應用,你可以引導訪問者按你設定的順序瀏覽網頁,你也可以根據客戶輸入的數據定制特別的頁面。
          在保存數據方面,這個方法并不能替代cookies或者CGI,因為當你一旦關閉或者刷新整個框架頁面,數據將會丟失。這種方法的好處是不需要服務器特別權限的支持,也不會給安全上帶來什么問題。
          4.浮動Frame的腳本
          支持浮動frame的瀏覽器同樣支持在IFRAME中使用類似普通frame的腳本。唯一不同的地方是:普通無框架頁面可以建立一個frames索引。浮動frame建立索引是根據HTML代碼中的<IFRAME>順序。類似普通frame,浮動frame中每一個元素都遵循窗口物件的特性。
          在IFRAME中保證腳本安全執行,你必須確認窗口中的frames.length不為0。例如,在下面的例子中,鏈接的target是浮動frame,內容顯示在<IFRAME>中,如果浮動frame不存在,則使用"_top"參數產生新窗口:
          <IFRAME name="floater" src="trog.htm"
          width=200 height=200></IFRAME>
          <A href="grot.html" target="floater"
          onClick="if (!self.frames.length)
          this.target='_top'">See grot.htm</A> 
          一個含有浮動frame的頁面就是這個frame的父窗口。所以多個浮動frame之間可以通過父窗口的parent.frames數組屬性來訪問。
          5. 預防腳本出錯
          雖然HTML的frame有標準的規范說明,但是DOM(Documentation Object Model 參見http://www.w3.org/TR/REC-DOM-Level-1/)的第一級只將它定義為一個HTML元素,而不是一個窗口元素。有關frame的javascript行為(behavior)沒有明確的定義,這個定義的缺乏將使得在讀取frame框架的時候,腳本會發生沖突。
          第一個矛盾就是頁面的onload和onunload事件是和<BODY>標簽相關聯的,而<FRAMESET>頁面卻忽略了<BODY>標簽。目前的做法是將這些事件放置在frame框架的最上面的窗口頁面中,也就是第一個調入的頁面。但有些3.0的瀏覽器不支持這樣的做法。
          在即時修改frame頁面內容的時候,許多瀏覽器同樣會發生腳本出錯。出錯的原因是:<FRAME>標簽中定義了頁面內容,而在后面的腳本中卻要求讀取或寫入其他的東西,兩者發生沖突。這些瀏覽器常常執行javascript腳本的命令,又繼續讀取最初設定的頁面代碼,從而產生javascript error信息。這些問題的解決方案是在你開始操作frame之前,確認所有frame頁面讀取完畢。這有一個好的辦法:就是使你的frame初始頁面盡量簡單,并在讀取完畢后報告。
          例如:假設您有一個框架頁面需要在讀取完畢后執行goToIt()功能,將下面的javascript腳本放入最初frameset頁面:
          countDown=frames.length;
          function soundOff() {
          countDown--;
          if (countDown==0) {
          goToIt();
          }
          然后在每個子窗口的頁面代碼<BODY>標簽里加入onLoad="parent.soundOff()",當所有frame頁面都被讀取并執行soundOff()功能后,countDown變量值為0,開始執行goTOIt()。

          posted on 2012-07-26 08:42 ** 閱讀(644) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          公告

          你好!

          常用鏈接

          留言簿(2)

          隨筆檔案

          文章分類

          文章檔案

          新聞檔案

          相冊

          收藏夾

          C#學習

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 同德县| 郯城县| 金湖县| 湖南省| 怀宁县| 容城县| 漳平市| 孟州市| 若羌县| 浑源县| 乡宁县| 枣阳市| 陆丰市| 霍城县| 金沙县| 黔江区| 英山县| 绥阳县| 万年县| 奉新县| 江都市| 临城县| 湟中县| 临颍县| 武胜县| 遂川县| 富平县| 乾安县| 且末县| 涡阳县| 和田县| 嘉定区| 安顺市| 阜新| 四子王旗| 儋州市| 开远市| 日喀则市| 正镶白旗| 新巴尔虎左旗| 岗巴县|