?? javascr3.html
字號:
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=gb_2312-80">
<title>網頁教學網->>免費教程</title>
<link rel="stylesheet" type="text/css" href="samp.css">
<script language="JavaScript">
<!-- Hide
function WinOpen(url) {
msg=open(url,"DisplayWindow","toolbar=yes,directories=no,menubar=no");
}
function stat(txt) {
window.status = txt;
setTimeout("erase()",1500);
}
function erase() {
window.status="";
}
// -->
</script>
</head>
<body background="backgr.gif">
<table border="0" WIDTH="750" valign=top>
<tr>
<td width="150" valign=top><br><br><br>
<br>
</td><td width="150">
</td><td width="450">
<br>
<h1 align="center" size="6">第 3 集</h1>
<HR WIDTH="100%" ALIGN="center" >
<p>
<br>
<br>
<TABLE><TR><TD>
<p>
曾有許多網友問我有關JavaScript與框架(為求方便,以下均用frame表示)合用的問題。事實上,
若您同時想用frames和JavaScript的功能,首先您必需擁有Netscape Navigator 2.0 (或以上)瀏覽器(
至少目前是如此)。當然也有某些瀏覽器支援frames的功能--如:Oracle開發的PowerBrowser,但此
瀏覽器還只是Beta版,目前尚不支援JavaScript。<p>
首先,我稍微解釋一下frames的功用。因為frames功能才開發不久,仍有許多HTML文件中未使
用這項新功能。Frames最主要功用是"分割"您的視窗,使每個"小視窗"(frame)能顯示不同的HTM
L文件(譯按:這有點類似電視的子母畫面)。更妙的是,不同frame之間可以互動(interact),也就是
說不同frame之間可以交換訊息與資料(information)。例如:假設您開了兩個frames,第一個frame可
顯示普通HTML文件,第二個frame可顯示工具列(toolbar)。此工具列中可包含瀏覽您homepage所
需的各種按鈕。如此一來,即使第一個frame載入了另一個HTML文件,您仍可在第二個frame中
看到工具列。<p>
現在我先將上述特性展示給您瞧瞧。請按一下下面的按鈕,看一看frames的長相。(如果您是線
上觀看此文件,您可能需稍候一下才看得到結果,因為scripts必需由server中載入到您的機器)。
<p>
<form><input type="button" name="Button1" value="請按這里" onclick="WinOpen('frtest.html')">
</form>
<p>
以下是此frame的寫法:
<p>
<pre>
<HTML>
<HEAD>
<title>Frames</title>
</HEAD>
<FRAMESET ROWS="50%,50%">
<FRAME SRC="frtest1.html" name="fr1">
<FRAME SRC="frtest2.html" name="fr2">
</FRAMESET>
</HTML>
</pre>
<p>
首先您必須告訴瀏覽器您要開幾個frame?這是由 <frameset...> 這個標簽(tag)來宣告。<i>rows</i>這項
參數是告訴瀏覽器您想將視窗分割成幾列?而 <i>cols</i>這項參數是告訴瀏覽器您想將視窗分割成幾
行?您也可以用很多組的 <frameset...> tags 將視窗分割得更復雜。以下是 Netsacpe所提到的一個
范例:
<p>
<pre>
<FRAMESET COLS="50%,50%">
<FRAMESET ROWS="50%,50%">
<FRAME SRC="cell.html">
<FRAME SRC="cell.html">
</FRAMESET>
<FRAMESET ROWS="33%,33%,33%">
<FRAME SRC="cell.html">
<FRAME SRC="cell.html">
<FRAME SRC="cell.html">
</FRAMESET>
</FRAMESET>
</pre>
<p>
<form><input type="button" name="Button2" value="試試這個按鈕" onclick="WinOpen('nsexmpl.html')">
</form>
<p>
上面這個例子產生了兩行,而且第二行又分割成三列大小相等的空間。在第一個 <frameset> tag
中的 50%,50% 兩項參數是用來表是frame的大小。<br>
您可以給每個frame一個"名字" (name)。frame的名字在JavaScript語法中的地位非常重要。在本
章的第一個范例中您已學到如何替frame命名。接下來您可以用 <frame> tag 告訴瀏覽器您要載
入哪一個 HTML文件。<p><br>
<HR WIDTH="80%" ALIGN="center" SIZE="2">
<p>
我想您已了解frames的基本用法,接下來我們再看一個有趣的范例:
<p>
<form><input type="button" name="Button3" value="快試試這里" onclick="WinOpen('frames.html')">
</form>
<p>
上面的按鈕將顯示 : 按某個frame中的按鈕後,會在另一frame中寫入文字。<br>
以下是此功能的原始碼:
<p>
<i>在產生frames效果之前,您需先制作下列原始碼 (frames.html):</i>
<p>
<pre>
<HTML>
<HEAD>
<title>Frames</title>
</HEAD>
<FRAMESET ROWS="50%,50%">
<FRAME SRC="frame1.html" name="fr1" noresize>
<FRAME SRC="frame2.html" name="fr2">
</FRAMESET>
</HTML>
</pre>
<p>
<i>以下是 frame1.html 的原始碼:</i>
<p>
<pre>
<HTML>
<HEAD>
<script language="JavaScript">
<!-- Hiding
function hi() {
document.write("嗨!<br>");
}
function yo() {
document.write("呦!<br>");
}
function bla() {
document.write("啦 啦 啦<br>");
}
// -->
</script>
</HEAD>
<BODY>
這是第一個 frame!
</BODY>
</HTML>
</pre>
<p>
<i>以下是 frame2.html 的原始碼:</i>
<p>
<pre>
<HTML>
<body>
這是第二個 frame!
<p>
<FORM NAME="buttonbar">
<INPUT TYPE="button" VALUE="嗨" onClick="parent.fr1.hi()">
<INPUT TYPE="button" VALUE="呦" onClick="parent.fr1.yo()">
<INPUT TYPE="button" VALUE="啦" onCLick="parent.fr1.bla()">
</FORM>
</BODY>
</HTML>
</pre>
<p>
哇!這些語法越來越長了!上述的語法是如何運作的呢?當使用者載入第一個檔案 (frames.html)後
,將會產生兩個frame,并且在第一個frame(命名為 'fr1')中載入frame1.html,而在第二個frame (
命名為 'fr2')中載入frame2.html。到目前為止都只是普通的 HTML 語法。或許您已發現在
frame1.html中包含了JavaScript語法,但此JavaScript并沒有馬上被執行。難到這些函式(functions)
是不必要的?亦或是我懶得刪除這些不必要的函式?雖然我是懶散慣的人,但這些函式確實是必
須的。它們是被位於frame2.html中之JavaScript語法所呼叫而執行的。我在frame2.html中利用Java
Script語法制作了三個按鈕,制作按鈕來呼叫函式的方法我已在第一章提過,相信您對onClick的
用法已相當熟悉。但是...... parent.fr1 是干嘛用的?<p>
若您對物件觀念已相當了解,相信它對您不是甚麼新鮮事。您可以看到frames.html同時呼叫 frame1.html
與 frame2.html兩個檔案,所以frames.html稱為frame1.html與frame2.html的 parent (請
恕我直接用英文)。同理,這兩個新的frame就稱為frames.html的 child- frames。您可將這種復雜
的關系想像成階層式架構(hierarchy)。以下我借助一個小 '圖' 來厘清這種關系:
<p>
<pre>
frames.html parent
/ \
/ \
/ \
fr1(frame1.html) fr2(frame2.html) children
</pre>
<p>
當然您可依此類推,產生一些 'grandchildren' frames。 (當然,這并不是正式的名稱):
<p>
<pre>
frames.html parent
/ \
/ \
/ \
fr1(frame1.html) fr2(frame2.html) children
/ \
/ \
/ \
gchild1 gchild2 'grandchildren'
</pre>
<p>
若您想由frame2.html呼叫parent- frame中的任何函數,您只要將 <i>parent</i> 放在您欲呼叫函數名稱之
前即可。同理,若由parent- frame呼叫位於frame1.html中的函數,您只需將 <i>fr1</i> 放在被呼叫函數
名稱之前。為什麼用 <i>fr1</i> 呢?原因是我們在frames.html中開了兩個frame,而且將它們分別命名為
<i>fr1</i>和 <i>fr2</i>。所以我用 <i>fr1</i> 代表第一個frame (frame1.html)。接下來的步驟就相當容易了。當我們欲
由frame2.html ( 命名為 <i>fr2</i>)呼叫第一個frame中的函式時該怎麼做?由上面的"小圖"您可以發現,
frame1.html 和frame2.html之間并無直接關連 (connection),因此您不可以"直接"由frame2.html呼
叫位於 frame1.html中的函式。您必須透過parent- frame來呼叫它,所以正確指標(index)應為
parent.fr1。例如若您想由frame2.html呼叫 hi(),您必須寫成 parent.fr1.hi()。這也就是為什麼
frame2.html中的 onClick要寫成那種樣子的原因了。
<p>
對了!附帶提一點小東西。您或許已發現本章中都用<script language="JavaScript">代替前兩章用
的<script language="LiveScript">。其實此二者間并沒什麼差別。但起初JavaScript被植入Netscape
瀏覽器時,您只能用LiveScript語法。(這是一種由Netscape發展的舊語法,和JavaScript極為類似
)。我想既然我們討論的是JavaScript函式,就應使用JavaScript語法。 (這只是我的一己之見,在
'JavaScript- society'中有許多關於LiveScript的討論,目前也是眾說紛紜....)
<p>
<HR WIDTH="80%" ALIGN="center" SIZE="2">
<p>
在此我要花一點時間討論一個很多人關心的問題。當您觀賞一個擁有數個frame的網頁時,若您
想link至internet其它網頁,這些frame并不會消失而且會帶來視覺上的干擾。這些討厭的frame應
該如何消除呢?<p>
您只要在您的<a href...> tag中加入TARGET="_top" 就可解決這個困擾。方法如下:<br>
<pre><a href="goaway.html" TARGET="_top">如果您不想觀賞我的網頁了</a></pre>
<p>
當然,您必須在您想要獲得此效果的link中都加入TARGET="_top" 。若想要整個網頁中的link
都有此效果,您可在此網頁的head中加入<base target="_top">較方便。如此一來每個link被按下
後都可將frame消除。
</TD></TR></TABLE>
</CENTER>
<p>
<HR WIDTH="80%" ALIGN="center" SIZE="2">
<p align=center><a href=./index.htm>[返回]</a></p>
</td></tr></table>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -