(轉)IE瀏覽器的選單欄和工具欄原理
阿新 • • 發佈:2019-01-23
1、最基本的彈出視窗程式碼】
其實程式碼非常簡單:
<SCRIPT LANGUAGE="javascript">
<!--
window.open ('page.html')
-->
</SCRIPT>
因為這是一段javascripts程式碼,所以它們應該放在<SCRIPT LANGUAGE="javascript">之間。<!-- 和 -->是對一些版本低的瀏覽器起作用,在這些老瀏覽器中不會將標籤中的程式碼作為文字顯示出來。要養成這個好習慣啊。
window.open ('page.html') 用於控制彈出新的視窗page.html,如果page.html不與主視窗在同一路徑下,前面應寫明路徑,絕對路徑(http://)和相對路徑(../)均可。
用單引號和雙引號都可以,只是不要混用。
這一段程式碼可以加入HTML的任意位置,<head>和</head>之間可以,<body>間</body>也可以,越前越早執行,尤其是頁面程式碼長,又想使頁面早點彈出就儘量往前放。也可以,越前越早執行,尤其是頁面程式碼長,又想使頁面早點彈出就儘量往前放。
【2、經過設定後的彈出視窗】
下面再說一說彈出視窗的設定。只要再往上面的程式碼中加一點東西就可以了。我們來定製這個彈出的視窗的外觀,尺寸大小,彈出的位置以適應該頁面的具體情況。
<SCRIPT LANGUAGE="javascript">
<!--
window.open ('page.html', 'newwindow', 'height=100, width=400, top=0,left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no,status=no')
//寫成一行
-->
</SCRIPT>
引數解釋:
<SCRIPT LANGUAGE="javascript"> js指令碼開始;
window.open 彈出新視窗的命令;
'page.html' 彈出視窗的檔名;
'newwindow' 彈出視窗的名字(不是檔名),非必須,可用空''代替;
height=100 視窗高度;
width=400 視窗寬度;
top=0 視窗距離螢幕上方的象素值;
left=0 視窗距離螢幕左側的象素值;
toolbar=no 是否顯示工具欄,yes為顯示;
menubar,scrollbars 表示選單欄和滾動欄。
resizable=no 是否允許改變視窗大小,yes為允許;
location=no 是否顯示位址列,yes為允許;
status=no 是否顯示狀態列內的資訊(通常是檔案已經開啟),yes為允許;
</SCRIPT> js指令碼結束
【3、用函式控制彈出視窗】
下面是一個完整的程式碼:
<html>
<head>
<script LANGUAGE="javascript">
<!--
function openwin() {
window.open ("page.html", "newwindow", "height=100, width=400, toolbar=no,menubar=no, scrollbars=no, resizable=no, location=no, status=no")
//寫成一行
}
//-->
</script>
</head>
<body onload="openwin()">
...任意的頁面內容...
</body>
</html>
這裡定義了一個函式openwin(),函式內容就是開啟一個視窗。在呼叫它之前沒有任何用途。
怎麼呼叫呢?
方法一:<body onload="openwin()"> 瀏覽器讀頁面時彈出視窗;
方法二:<body onunload="openwin()"> 瀏覽器離開頁面時彈出視窗;
方法三:用一個連線呼叫:<a href="#" onclick="openwin()">開啟一個視窗</a>
注意:使用的“#”是虛連線。
方法四:用一個按鈕呼叫:<input type="button" onclick="openwin()" value="開啟視窗">
【4、同時彈出2個視窗】
對原始碼稍微改動一下:
<script LANGUAGE="javascript">
<!--
function openwin() {
window.open ("page.html", "newwindow", "height=100, width=100, top=0,left=0,toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no,status=no")
//寫成一行
window.open ("page2.html", "newwindow2", "height=100, width=100, top=100,left=100,toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no,status=no")
//寫成一行
}
//-->
</script>
為避免彈出的2個視窗覆蓋,用top和left控制一下彈出的位置不要相互覆蓋即可。最後用上面說過的四種方法呼叫即可。
注意:2個視窗的name(newwindows和newwindow2)不要相同,或者乾脆全部為空。OK?
【5、主視窗開啟檔案1.htm,同時彈出小視窗page.html】
如下程式碼加入主視窗<head>區:
<script language="javascript">
<!--
function openwin() {
window.open("page.html","","width=200,height=200")
}
//-->
</script>
加入<body>區:
<a href="1.htm" onclick="openwin()">open</a>即可。
【6、彈出的視窗之定時關閉控制】
下面我們再對彈出的視窗進行一些控制,效果就更好了。如果我們再將一小段程式碼加入彈出的頁面(注意是加入到page.html的HTML中,可不是主頁面中,否則...),讓它10秒後自動關閉是不是更酷了?
首先,將如下程式碼加入page.html檔案的<head>區:
<script language="javascript">
function closeit() {
setTimeout("self.close()",10000) //毫秒
}
</script>
然後,再用<body onload="closeit()"> 這一句話代替page.html中原有的<BODY>這一句就可以了。(這一句話千萬不要忘記寫啊!這一句的作用是呼叫關閉視窗的程式碼,10秒鐘後就自行關閉該視窗。)
【7、在彈出視窗中加上一個關閉按鈕】
<FORM>
<INPUT TYPE='BUTTON' value='關閉' onClick='window.close()'>
</FORM>
呵呵,現在更加完美了!
【8、內包含的彈出視窗---一個頁面兩個視窗】
上面的例子都包含兩個視窗,一個是主視窗,另一個是彈出的小視窗。通過下面的例子,你可以在一個頁面內完成上面的效果。
<html>
<head>
<SCRIPT LANGUAGE="javascript">
function openwin()
{
OpenWindow=window.open("", "newwin", "height=250, width=250,toolbar=no,scrollbars="+scroll+",menubar=no");
//寫成一行
OpenWindow.document.write("<TITLE>例子</TITLE>")
OpenWindow.document.write("<BODY BGCOLOR=#ffffff>")
OpenWindow.document.write("<h1>Hello!</h1>")
OpenWindow.document.write("New window opened!")
OpenWindow.document.write("</BODY>")
OpenWindow.document.write("</HTML>")
OpenWindow.document.close()
}
</SCRIPT>
</head>
<body>
<a href="#" onclick="openwin()">開啟一個視窗</a>
<input type="button" onclick="openwin()" value="開啟視窗">
</body>
</html>
看看OpenWindow.document.write()裡面的程式碼不就是標準的HTML嗎?只要按照格式寫更多的行即可。千萬注意多一個標籤或少一個標籤就會出現錯誤。記得用OpenWindow.document.close()結束啊。
【9、終極應用--彈出的視窗之Cookie控制】
回想一下,上面的彈出視窗雖然酷,但是有一點小毛病(沉浸在喜悅之中,一定沒有發現吧?)比如你將上面的指令碼放在一個需要頻繁經過的頁面裡(例如首頁),那麼每次重新整理這個頁面,視窗都會彈出一次,是不是非常煩人?:-(
有解決的辦法嗎?當然有!我們使用cookie來控制一下就可以了。首先,將如下程式碼加入主頁面HTML的<HEAD>區:
<script>
function openwin(){
window.open("page.html","","width=200,height=200")
}
function get_cookie(Name) {
var search = Name + "="
var returnvalue = "";
if (documents.cookie.length > 0) {
offset = documents.cookie.indexOf(search)
if (offset != -1) {
offset += search.length
end = documents.cookie.indexOf(";", offset);
if (end == -1)
end = documents.cookie.length;
returnvalue=unescape(documents.cookie.substring(offset, end))
}
}
return returnvalue;
}
function loadpopup(){
if (get_cookie('popped')==''){
openwin()
documents.cookie="popped=yes"
}
}
</script>
然後,用<body onload="loadpopup()">(注意不是openwin而是loadpop啊!)替換主頁面中原有的<BODY>這一句即可。你可以試著重新整理一下這個頁面或重新進入該頁面,視窗再也不會彈出了。真正的Pop-Only-Once!
一種沒有邊框及選單欄、工具欄、位址列、狀態列等的無邊框視窗(CW)曾經一度很流行,被很多網站尤其是個人網站所採用,CW也有現成的原始碼供網友們使用,但是最初的CW使用起來很不方便,有兩個JS檔案,還要設定一些引數,這對一些初學者來講是很困難的事情。所以我就有了一個想法:重新寫一個全新的無邊框視窗,只用一個函式實現,以供網友方便使用。
我給這個全新的無邊框視窗起名為NBW,NBW即No Border Window的縮寫,只是想區別於CW。這個無邊框視窗可以隨意拖動、最小化、關閉等等,不僅在IE5/IE6中測試通過,在騰訊的TE中測試也沒有問題。
呼叫的過程如下:(noBorderWin函式是事先定義好的,後面會對函式的實現過程進行分析)
noBorderWin(fileName,w,h,titleBg,moveBg,titleColor,titleWord,scr)
各引數的說明如下:
fileName :要開啟的檔案。
w :視窗的寬度(px)。
h :視窗的高度(px)。
titleBg :視窗“標題欄”的背景色以及視窗邊框顏色。
moveBg :拖動視窗時“標題欄”的背景色以及視窗邊框顏色。
titleColor:視窗“標題欄”文字的顏色。
titleWord :視窗“標題欄”中顯示的文字。
scr :視窗中是否出現滾動條。取值yes/no或者1/0。
我們看到,視窗樣式全部在函式的引數中設定,從而保證了使用的便捷。比如,上面例子的程式碼如下:
<a href=#none onclick=noBorderWin('test.html','400','240','#000000','#333333','#CCCCCC','一個無邊視窗的測試例子','yes');>點選此處將彈出NBW視窗</a>
如何使用已經說完了,那麼,這個函式具體是如何實現的呢?下面,我們就以直接給出原始碼並加以註釋的方式進行講解。為了容易區分閱讀,程式碼部分使用灰色,註釋部分使用紅色。
程式碼和註釋如下:
//--------------------------------------------------------------------------------------------------
<script language=javascript>
//*****定製NBW視窗中幾個用到的圖片的路徑*****
minimizebar="minimize.gif"; //視窗右上角最小化“按鈕”的圖片
minimizebar2="minimize2.gif"; //滑鼠懸停時最小化“按鈕”的圖片
closebar="close.gif"; //視窗右上角關閉“按鈕”的圖片
closebar2="close2.gif"; //滑鼠懸停時關閉“按鈕”的圖片
icon="icon.gif"; //視窗左上角的小圖示
//***************定製結束*****************
//*******開始定義noBorderWin()函式********
function noBorderWin(fileName,w,h,titleBg,moveBg,titleColor,titleWord,scr)
{
var contents="<html>"+ //變數contents是一個字串變數,它是NBW視窗中的所有程式碼。
"<head>"+
"<title>"+titleWord+"</title>"+
"<meta http-equiv=/"Content-Type/" content=/"text/html; charset=gb2312/">"+
"<object id=hhctrl type='application/x-oleobject' classid='clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11'><param name='Command' value='minimize'></object>"+ //注意這一句,是實現視窗的最小化的關鍵。在後面,將通過hhctrl.Click()來實現最小化。
"</head>"+
"<body topmargin=0 leftmargin=0 scroll=no onselectstart='return false' ondragstart='return false'>"+ //為了使視窗更加逼真,在這一句中,屏弊了拖拽事件和選取事件。
" <table height=100% width=100% cellpadding=0 cellspacing=1 bgcolor="+titleBg+" id=mainTab>"+
" <tr height=18 style=cursor:default; onmousedown='x=event.x;y=event.y;setCapture();mainTab.bgColor=/""+moveBg+"/";' onmouseup='releaseCapture();mainTab.bgColor=/""+titleBg+"/";' onmousemove='if(event.button==1)self.moveTo(screenLeft+event.x-x,screenTop+event.y-y);'>"+ //在這一句中,實現了NBW視窗的任意拖拽,注意onmousedown、onmouseup和onmousemove時都“發生”了什麼,仔細體會其過程。
" <td width=18 align=center><img height=12 width=12 border=0 src="+icon+"></td>"+
" <td width="+w+"><span style=font-size:12px;color:"+titleColor+";font-family:宋體;position:relative;top:1px;>"+titleWord+"</span></td>"+ //以上兩句,將小圖示和標題欄的文字寫入。
" <td width=14><img border=0 width=12 height=12 alt=最小化 src="+minimizebar+" onmousedown=hhctrl.Click(); onmouseover=this.src='"+minimizebar2+"' onmouseout=this.src='"+minimizebar+"'></td>"+ //通過前面提到的方法實現了視窗最小化按鈕的功能。
" <td width=13><img border=0 width=12 height=12 alt=關閉 src="+closebar+" onmousedown=self.close(); onmouseover=this.src='"+closebar2+"' onmouseout=this.src='"+closebar+"'></td>"+ //實現視窗關閉按鈕的功能。
" </tr>"+
" <tr height=*>"+
" <td colspan=4>"+
" <iframe name=nbw_v6_iframe src="+fileName+" scrolling="+scr+" width=100% height=100% frameborder=0></iframe>"+ //在這一句中,將你要開啟的檔案寫到iframe中。
" </td>"+
" </tr>"+
" </table>"+
"</body>"+
"</html>";
//至此,已經定義完contents變數,在後面,我們將看到:它被寫入到NBW視窗中去。
pop=window.open("","_blank","fullscreen=yes"); //開啟一個全屏視窗。
pop.resizeTo(w,h); //用resize()方法將視窗定製成自己想要的大小。
pop.moveTo((screen.width-w)/2,(screen.height-h)/2); //用moveTo()方法將視窗移到螢幕中心。
pop.document.writeln(contents); //將視窗內容(即變數contents)寫進去。
//至此,或許你認為它應該結束了。的確,在IE中,它的確已經結束了,但是在使用了IE核心的多視窗瀏覽器(比如騰訊的TE)中,一般window.open()是不會彈出新視窗的,而是出現在它的“多視窗”中的一個視窗,所以,後面的程式碼我們將通過視窗大小來判斷NBW視窗是否是獨立的視窗,如果不是,我們將使用showModalDialog()對話方塊做為一個過渡,重新“彈”出一個獨立的視窗。
if(pop.document.body.clientWidth!=w||pop.document.body.clientHeight!=h) //通過判斷NBW視窗的實際大小來判斷NBW是否真正是一個獨立的視窗。如果不是,將執行後面的語句。
{
temp=window.open("","nbw_v6");
temp.close(); //上面兩句的功能是如果原來有name=nbw_v6的視窗,則將其關閉。
window.showModalDialog("about:<"+"script language=javascript>window.open('','nbw_v6','fullscreen=yes');window.close();"+"</"+"script>","","dialogWidth:0px;dialogHeight:0px"); //彈出一個對話方塊,再從對話方塊中彈出一個name=nbw_v6的全屏視窗,注意這時的視窗肯定是獨立的視窗了。
pop2=window.open("","nbw_v6"); //彈出一個name=nbw_v6的視窗,因為前面彈出過一個name=nbw_v6的全屏視窗,所以這一次的視窗只是在那個視窗中重新整理了一下,而通過這樣一個過程則把那個視窗賦給了變數pop2。
pop2.resizeTo(w,h); //用resize()方法將視窗定製成自己想要的大小。
pop2.moveTo((screen.width-w)/2,(screen.height-h)/2); //用moveTo()方法將視窗移到螢幕中心。
pop2.document.writeln(contents); //將視窗內容(即變數contents)寫進去。
pop.close(); //將原來沒有真正“彈”出來的視窗關掉。
}
//*******結束定義noBorderWin()函式******** }
</script>
//--------------------------------------------------------------------------------------------------
至此,全部程式碼講解完畢。我們可以看到,在實現過程中我們使用了iframe標記,所以現在的NBW視窗僅限在IE及使用IE核心的瀏覽器中使用
其實程式碼非常簡單:
<SCRIPT LANGUAGE="javascript">
<!--
window.open ('page.html')
-->
</SCRIPT>
因為這是一段javascripts程式碼,所以它們應該放在<SCRIPT LANGUAGE="javascript">之間。<!-- 和 -->是對一些版本低的瀏覽器起作用,在這些老瀏覽器中不會將標籤中的程式碼作為文字顯示出來。要養成這個好習慣啊。
window.open ('page.html') 用於控制彈出新的視窗page.html,如果page.html不與主視窗在同一路徑下,前面應寫明路徑,絕對路徑(http://)和相對路徑(../)均可。
用單引號和雙引號都可以,只是不要混用。
這一段程式碼可以加入HTML的任意位置,<head>和</head>之間可以,<body>間</body>也可以,越前越早執行,尤其是頁面程式碼長,又想使頁面早點彈出就儘量往前放。也可以,越前越早執行,尤其是頁面程式碼長,又想使頁面早點彈出就儘量往前放。
【2、經過設定後的彈出視窗】
下面再說一說彈出視窗的設定。只要再往上面的程式碼中加一點東西就可以了。我們來定製這個彈出的視窗的外觀,尺寸大小,彈出的位置以適應該頁面的具體情況。
<SCRIPT LANGUAGE="javascript">
<!--
window.open ('page.html', 'newwindow', 'height=100, width=400, top=0,left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no,status=no')
//寫成一行
-->
</SCRIPT>
引數解釋:
<SCRIPT LANGUAGE="javascript"> js指令碼開始;
window.open 彈出新視窗的命令;
'page.html' 彈出視窗的檔名;
'newwindow' 彈出視窗的名字(不是檔名),非必須,可用空''代替;
height=100 視窗高度;
width=400 視窗寬度;
top=0 視窗距離螢幕上方的象素值;
left=0 視窗距離螢幕左側的象素值;
toolbar=no 是否顯示工具欄,yes為顯示;
menubar,scrollbars 表示選單欄和滾動欄。
resizable=no 是否允許改變視窗大小,yes為允許;
location=no 是否顯示位址列,yes為允許;
status=no 是否顯示狀態列內的資訊(通常是檔案已經開啟),yes為允許;
</SCRIPT> js指令碼結束
【3、用函式控制彈出視窗】
下面是一個完整的程式碼:
<html>
<head>
<script LANGUAGE="javascript">
<!--
function openwin() {
window.open ("page.html", "newwindow", "height=100, width=400, toolbar=no,menubar=no, scrollbars=no, resizable=no, location=no, status=no")
//寫成一行
}
//-->
</script>
</head>
<body onload="openwin()">
...任意的頁面內容...
</body>
</html>
這裡定義了一個函式openwin(),函式內容就是開啟一個視窗。在呼叫它之前沒有任何用途。
怎麼呼叫呢?
方法一:<body onload="openwin()"> 瀏覽器讀頁面時彈出視窗;
方法二:<body onunload="openwin()"> 瀏覽器離開頁面時彈出視窗;
方法三:用一個連線呼叫:<a href="#" onclick="openwin()">開啟一個視窗</a>
注意:使用的“#”是虛連線。
方法四:用一個按鈕呼叫:<input type="button" onclick="openwin()" value="開啟視窗">
【4、同時彈出2個視窗】
對原始碼稍微改動一下:
<script LANGUAGE="javascript">
<!--
function openwin() {
window.open ("page.html", "newwindow", "height=100, width=100, top=0,left=0,toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no,status=no")
//寫成一行
window.open ("page2.html", "newwindow2", "height=100, width=100, top=100,left=100,toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no,status=no")
//寫成一行
}
//-->
</script>
為避免彈出的2個視窗覆蓋,用top和left控制一下彈出的位置不要相互覆蓋即可。最後用上面說過的四種方法呼叫即可。
注意:2個視窗的name(newwindows和newwindow2)不要相同,或者乾脆全部為空。OK?
【5、主視窗開啟檔案1.htm,同時彈出小視窗page.html】
如下程式碼加入主視窗<head>區:
<script language="javascript">
<!--
function openwin() {
window.open("page.html","","width=200,height=200")
}
//-->
</script>
加入<body>區:
<a href="1.htm" onclick="openwin()">open</a>即可。
【6、彈出的視窗之定時關閉控制】
下面我們再對彈出的視窗進行一些控制,效果就更好了。如果我們再將一小段程式碼加入彈出的頁面(注意是加入到page.html的HTML中,可不是主頁面中,否則...),讓它10秒後自動關閉是不是更酷了?
首先,將如下程式碼加入page.html檔案的<head>區:
<script language="javascript">
function closeit() {
setTimeout("self.close()",10000) //毫秒
}
</script>
然後,再用<body onload="closeit()"> 這一句話代替page.html中原有的<BODY>這一句就可以了。(這一句話千萬不要忘記寫啊!這一句的作用是呼叫關閉視窗的程式碼,10秒鐘後就自行關閉該視窗。)
【7、在彈出視窗中加上一個關閉按鈕】
<FORM>
<INPUT TYPE='BUTTON' value='關閉' onClick='window.close()'>
</FORM>
呵呵,現在更加完美了!
【8、內包含的彈出視窗---一個頁面兩個視窗】
上面的例子都包含兩個視窗,一個是主視窗,另一個是彈出的小視窗。通過下面的例子,你可以在一個頁面內完成上面的效果。
<html>
<head>
<SCRIPT LANGUAGE="javascript">
function openwin()
{
OpenWindow=window.open("", "newwin", "height=250, width=250,toolbar=no,scrollbars="+scroll+",menubar=no");
//寫成一行
OpenWindow.document.write("<TITLE>例子</TITLE>")
OpenWindow.document.write("<BODY BGCOLOR=#ffffff>")
OpenWindow.document.write("<h1>Hello!</h1>")
OpenWindow.document.write("New window opened!")
OpenWindow.document.write("</BODY>")
OpenWindow.document.write("</HTML>")
OpenWindow.document.close()
}
</SCRIPT>
</head>
<body>
<a href="#" onclick="openwin()">開啟一個視窗</a>
<input type="button" onclick="openwin()" value="開啟視窗">
</body>
</html>
看看OpenWindow.document.write()裡面的程式碼不就是標準的HTML嗎?只要按照格式寫更多的行即可。千萬注意多一個標籤或少一個標籤就會出現錯誤。記得用OpenWindow.document.close()結束啊。
【9、終極應用--彈出的視窗之Cookie控制】
回想一下,上面的彈出視窗雖然酷,但是有一點小毛病(沉浸在喜悅之中,一定沒有發現吧?)比如你將上面的指令碼放在一個需要頻繁經過的頁面裡(例如首頁),那麼每次重新整理這個頁面,視窗都會彈出一次,是不是非常煩人?:-(
有解決的辦法嗎?當然有!我們使用cookie來控制一下就可以了。首先,將如下程式碼加入主頁面HTML的<HEAD>區:
<script>
function openwin(){
window.open("page.html","","width=200,height=200")
}
function get_cookie(Name) {
var search = Name + "="
var returnvalue = "";
if (documents.cookie.length > 0) {
offset = documents.cookie.indexOf(search)
if (offset != -1) {
offset += search.length
end = documents.cookie.indexOf(";", offset);
if (end == -1)
end = documents.cookie.length;
returnvalue=unescape(documents.cookie.substring(offset, end))
}
}
return returnvalue;
}
function loadpopup(){
if (get_cookie('popped')==''){
openwin()
documents.cookie="popped=yes"
}
}
</script>
然後,用<body onload="loadpopup()">(注意不是openwin而是loadpop啊!)替換主頁面中原有的<BODY>這一句即可。你可以試著重新整理一下這個頁面或重新進入該頁面,視窗再也不會彈出了。真正的Pop-Only-Once!
一種沒有邊框及選單欄、工具欄、位址列、狀態列等的無邊框視窗(CW)曾經一度很流行,被很多網站尤其是個人網站所採用,CW也有現成的原始碼供網友們使用,但是最初的CW使用起來很不方便,有兩個JS檔案,還要設定一些引數,這對一些初學者來講是很困難的事情。所以我就有了一個想法:重新寫一個全新的無邊框視窗,只用一個函式實現,以供網友方便使用。
我給這個全新的無邊框視窗起名為NBW,NBW即No Border Window的縮寫,只是想區別於CW。這個無邊框視窗可以隨意拖動、最小化、關閉等等,不僅在IE5/IE6中測試通過,在騰訊的TE中測試也沒有問題。
呼叫的過程如下:(noBorderWin函式是事先定義好的,後面會對函式的實現過程進行分析)
noBorderWin(fileName,w,h,titleBg,moveBg,titleColor,titleWord,scr)
各引數的說明如下:
fileName :要開啟的檔案。
w :視窗的寬度(px)。
h :視窗的高度(px)。
titleBg :視窗“標題欄”的背景色以及視窗邊框顏色。
moveBg :拖動視窗時“標題欄”的背景色以及視窗邊框顏色。
titleColor:視窗“標題欄”文字的顏色。
titleWord :視窗“標題欄”中顯示的文字。
scr :視窗中是否出現滾動條。取值yes/no或者1/0。
我們看到,視窗樣式全部在函式的引數中設定,從而保證了使用的便捷。比如,上面例子的程式碼如下:
<a href=#none onclick=noBorderWin('test.html','400','240','#000000','#333333','#CCCCCC','一個無邊視窗的測試例子','yes');>點選此處將彈出NBW視窗</a>
如何使用已經說完了,那麼,這個函式具體是如何實現的呢?下面,我們就以直接給出原始碼並加以註釋的方式進行講解。為了容易區分閱讀,程式碼部分使用灰色,註釋部分使用紅色。
程式碼和註釋如下:
//--------------------------------------------------------------------------------------------------
<script language=javascript>
//*****定製NBW視窗中幾個用到的圖片的路徑*****
minimizebar="minimize.gif"; //視窗右上角最小化“按鈕”的圖片
minimizebar2="minimize2.gif"; //滑鼠懸停時最小化“按鈕”的圖片
closebar="close.gif"; //視窗右上角關閉“按鈕”的圖片
closebar2="close2.gif"; //滑鼠懸停時關閉“按鈕”的圖片
icon="icon.gif"; //視窗左上角的小圖示
//***************定製結束*****************
//*******開始定義noBorderWin()函式********
function noBorderWin(fileName,w,h,titleBg,moveBg,titleColor,titleWord,scr)
{
var contents="<html>"+ //變數contents是一個字串變數,它是NBW視窗中的所有程式碼。
"<head>"+
"<title>"+titleWord+"</title>"+
"<meta http-equiv=/"Content-Type/" content=/"text/html; charset=gb2312/">"+
"<object id=hhctrl type='application/x-oleobject' classid='clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11'><param name='Command' value='minimize'></object>"+ //注意這一句,是實現視窗的最小化的關鍵。在後面,將通過hhctrl.Click()來實現最小化。
"</head>"+
"<body topmargin=0 leftmargin=0 scroll=no onselectstart='return false' ondragstart='return false'>"+ //為了使視窗更加逼真,在這一句中,屏弊了拖拽事件和選取事件。
" <table height=100% width=100% cellpadding=0 cellspacing=1 bgcolor="+titleBg+" id=mainTab>"+
" <tr height=18 style=cursor:default; onmousedown='x=event.x;y=event.y;setCapture();mainTab.bgColor=/""+moveBg+"/";' onmouseup='releaseCapture();mainTab.bgColor=/""+titleBg+"/";' onmousemove='if(event.button==1)self.moveTo(screenLeft+event.x-x,screenTop+event.y-y);'>"+ //在這一句中,實現了NBW視窗的任意拖拽,注意onmousedown、onmouseup和onmousemove時都“發生”了什麼,仔細體會其過程。
" <td width=18 align=center><img height=12 width=12 border=0 src="+icon+"></td>"+
" <td width="+w+"><span style=font-size:12px;color:"+titleColor+";font-family:宋體;position:relative;top:1px;>"+titleWord+"</span></td>"+ //以上兩句,將小圖示和標題欄的文字寫入。
" <td width=14><img border=0 width=12 height=12 alt=最小化 src="+minimizebar+" onmousedown=hhctrl.Click(); onmouseover=this.src='"+minimizebar2+"' onmouseout=this.src='"+minimizebar+"'></td>"+ //通過前面提到的方法實現了視窗最小化按鈕的功能。
" <td width=13><img border=0 width=12 height=12 alt=關閉 src="+closebar+" onmousedown=self.close(); onmouseover=this.src='"+closebar2+"' onmouseout=this.src='"+closebar+"'></td>"+ //實現視窗關閉按鈕的功能。
" </tr>"+
" <tr height=*>"+
" <td colspan=4>"+
" <iframe name=nbw_v6_iframe src="+fileName+" scrolling="+scr+" width=100% height=100% frameborder=0></iframe>"+ //在這一句中,將你要開啟的檔案寫到iframe中。
" </td>"+
" </tr>"+
" </table>"+
"</body>"+
"</html>";
//至此,已經定義完contents變數,在後面,我們將看到:它被寫入到NBW視窗中去。
pop=window.open("","_blank","fullscreen=yes"); //開啟一個全屏視窗。
pop.resizeTo(w,h); //用resize()方法將視窗定製成自己想要的大小。
pop.moveTo((screen.width-w)/2,(screen.height-h)/2); //用moveTo()方法將視窗移到螢幕中心。
pop.document.writeln(contents); //將視窗內容(即變數contents)寫進去。
//至此,或許你認為它應該結束了。的確,在IE中,它的確已經結束了,但是在使用了IE核心的多視窗瀏覽器(比如騰訊的TE)中,一般window.open()是不會彈出新視窗的,而是出現在它的“多視窗”中的一個視窗,所以,後面的程式碼我們將通過視窗大小來判斷NBW視窗是否是獨立的視窗,如果不是,我們將使用showModalDialog()對話方塊做為一個過渡,重新“彈”出一個獨立的視窗。
if(pop.document.body.clientWidth!=w||pop.document.body.clientHeight!=h) //通過判斷NBW視窗的實際大小來判斷NBW是否真正是一個獨立的視窗。如果不是,將執行後面的語句。
{
temp=window.open("","nbw_v6");
temp.close(); //上面兩句的功能是如果原來有name=nbw_v6的視窗,則將其關閉。
window.showModalDialog("about:<"+"script language=javascript>window.open('','nbw_v6','fullscreen=yes');window.close();"+"</"+"script>","","dialogWidth:0px;dialogHeight:0px"); //彈出一個對話方塊,再從對話方塊中彈出一個name=nbw_v6的全屏視窗,注意這時的視窗肯定是獨立的視窗了。
pop2=window.open("","nbw_v6"); //彈出一個name=nbw_v6的視窗,因為前面彈出過一個name=nbw_v6的全屏視窗,所以這一次的視窗只是在那個視窗中重新整理了一下,而通過這樣一個過程則把那個視窗賦給了變數pop2。
pop2.resizeTo(w,h); //用resize()方法將視窗定製成自己想要的大小。
pop2.moveTo((screen.width-w)/2,(screen.height-h)/2); //用moveTo()方法將視窗移到螢幕中心。
pop2.document.writeln(contents); //將視窗內容(即變數contents)寫進去。
pop.close(); //將原來沒有真正“彈”出來的視窗關掉。
}
//*******結束定義noBorderWin()函式******** }
</script>
//--------------------------------------------------------------------------------------------------
至此,全部程式碼講解完畢。我們可以看到,在實現過程中我們使用了iframe標記,所以現在的NBW視窗僅限在IE及使用IE核心的瀏覽器中使用