《VBScript製作執行個體》筆記

來源:互聯網
上載者:User
vbscript|筆記
 
=========== 添加vbscript代碼的三種方法 ============
假設已有一個名為btnSubmit的按鈕,添加vbscript代碼的方法有三種:
第一種,最常用:
<script language="VBScript">
private sub btnSubmit_OnClick
msgbox("OK!")
end sub
</script>

第二種,使用For/Event屬性:
<script language="VBScript" for="btnSubmit" event="OnClick">
msgbox("OK!")
</script>

第三種:可以不必單獨為一個事件產生一個事件處理常式,只要把事件處理的過程當作元素標記中的一個屬性就可以了。需要注意,事件的處理過程的值應該用單引號括起來,而不像其他的屬性值是用雙引號括起來的。
<input type="submit" name="btnSubmit" value="按鈕" onclick='msgbox"OK!"' language="vbscript">

========On Error Resume Next語句=========
若不使用 On Error Resume Next 語句,發生的任何執行階段錯誤都將是致命的,即,顯示錯誤資訊並終止運行。
On Error Resume Next 會使程式從緊隨產生錯誤的語句之後的語句繼續執行,或是從緊隨最近一次調用過程(該過程含有 On Error Resume Next 語句)的語句繼續運行。這個語句可以不顧運行時的錯誤,繼續執行程式,之後您可以在過程內部建立錯誤處理常式。所以,如果希望在常式中進行內部錯誤處理,則應在每一個調用的常式中執行 On Error Resume Next 語句。

==========VBScript中的錯誤處理功能============
嚴格地講,VBScript中的錯誤處理功能是比較弱的,當錯誤發生時,它沒有辦法直接調用錯誤處理程式,它發生錯誤的時候並沒有產生中斷或提示資訊的機制。在Visual Basic中,錯誤發生的時候可以利用On Error Goto...的語句來進行錯誤處理,當錯誤發生時,程式會自動跳轉到用Goto後面的標號指示的代碼處。可是VBScript中不允許這樣使用。
但是利用On Error Resume Next語句,還是可以實現某種程度的錯誤捕捉功能,只不過所有的錯誤陷阱要麼必須線上處理,要麼只能報告程式中出現的最後一個錯誤。下面給出了VBScript的錯誤處理基本架構。
Sub MySub()
On Error Resume Next
........
'線上處理
if Err.Number=? then
........
end if
'報告指令碼遇到的上一個錯誤的資訊
if Err.Number<>0 then
MsgBox Err.Description
end if
End Sub
注意,當使用On Error Resume Next語句後,除了最後一個錯誤,前面發生過的錯誤都已經被清除了,所以無法知道發生過的所有錯誤。為了能夠及時處理,建議採用線上處理方法。

============Err對象的Raise方法==========
Err對象的Raise方法用於引發特定的錯誤。
可以用下面的程式顯示錯誤的描述

On Error Resume Next
Err.Raise 6 '產生溢出錯誤。
MsgBox ("Error # " & CStr(Err.Number) & " " & Err.Description)
Err.Clear '清除錯誤。

========ActiveX==========
ActiveX是使Web頁面豐富多彩的好方法,雖然HTML控制項提供了基本的可視化操作(如按鈕等),但卻缺乏那些使用者已經熟悉的可視化功能,而通過加入一些通用的(或者自己開發的)ActiveX控制項,使用者就能獲得常見的電腦應用程式的感覺。用<object>標籤使用ActiveX控制項。id屬性指定控制項的名字,然後是ActiveX控制項的ID號。如果瀏覽者的客戶機上沒有該控制項,就要用CodeBase指定下載這一控制項的來源站點點位置,如http://www.mysite.com/controls/mycontrol.ocx,除了指明控制項的副檔名為.ocx以外,不需要提供別的什麼資訊。接下來是用<param>標記添加參數。一個典型的程式段如下:
<object id="objUserActiveX" classid="clsid:7823A620-9DD9-11CF-A662-00AA00C066D2">
<param name="..." value="...">
<param name="..." value="...">
</object>
如果開發人員不想讓瀏覽者知道其<param>標記中的參數,該內容會被編碼,然後以data屬性寫入<object>標記,如:
<object id="objUserActiveX" classid="clsid:7823A620-9DD9-11CF-A662-00AA00C066D2" data="..........">

==========FileSystemObject對象=============

FileSystemObject (FSO) 對象模式,允許對大量的屬性、方法和事件,使用較熟悉的 object.method 文法,來處理檔案夾和檔案。
FSO 對象模式使檔案處理變得很容易。在處理檔案時,主要的目標是以易於訪問的格式把資料存放區在有效空間和資源中。這就要求能夠建立檔案,插入和改變資料,以及輸出(讀取)資料。因為把資料存放區在資料庫中,如 Access 或 SQL 伺服器,會給應用程式增加很大的開銷,所以把資料存放區在二進位或文字檔中可能是最有效解決方案。可能不希望有該開銷,或者資料訪問要求可能不需要與功能完備的資料庫相關聯的所有額外功能。
FSO 對象模式包含在 Scripting 類型庫中,該庫位於 Scrrun.DLL 檔案中。因而,要使用 FSO 對象模式,必須把 Scrrun.dll 放在 Web 服務器的適當系統目錄中。
在 VBScript 中,使用下面的代碼來建立 FileSystemObject 的一個執行個體:

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")

FileSystemObject 對象模式中的某些功能是多餘的。例如,可以用 FileSystemObject 對象的 CopyFile 方法,也可以用 File 對象的 Copy 方法來複製檔案。這兩種方法功能是相同的;兩種方法能使編程更靈活。

要訪問現有檔案,則使用 FileSystemObject 對象中的GetFile
方法:

Dim fso, f1
Set fso = CreateObject("Scripting.FileSystemObject")
Set f1 = fso.GetFile("c:\test.txt")

一旦有了對象的控制代碼,就可以訪問它的屬性。要找出最後一次修改檔案的時間,則使用下面的 VBScript 文法:

Response.Write "File last modified: " & f1.DateLastModified

建立空文字檔的方法是用 CreateTextFile 方法。 下面的樣本示範了在 VBScript 中如何用這種方法來建立文字檔:

Dim fso, f1
Set fso = CreateObject("Scripting.FileSystemObject")
Set f1 = fso.CreateTextFile("c:\testfile.txt", True)

要開啟現有的檔案,則使用 FileSystemObject 對象的 OpenTextFile 方法。
要寫資料到開啟的文字檔,則根據下表所述任務使用 TextStream 對象的 Write、WriteLine 或 WriteBlankLines 方法。
下面的 VBScript 例子示範了如何開啟檔案,並向檔案添加資料,然後關閉檔案:
Sub CreateFile()
Dim fso, tf
Set fso = CreateObject("Scripting.FileSystemObject")
Set tf = fso.CreateTextFile("c:\testfile.txt", True)
' 寫一行,並且帶有新行字元。
tf.WriteLine("Testing 1, 2, 3.")
' 向檔案寫三個新行字元。
tf.WriteBlankLines(3)
' 寫一行。
tf.Write ("This is a test.")
tf.Close
End Sub

要從文字檔讀取資料,則使用 Read、ReadLine 或 ReadAll 方法。下表描述了不同的任務應使用哪種方法。
如果使用 Read 或 ReadLine 方法,並且想跳過資料的特殊部分,則使用 Skip 或 SkipLine 方法。read 方法的結果文本存在一個字串中,該字串可以顯示在一個控制項中,也可以用字串函數(如 Left、Right 和 Mid)來分析,串連等等。
下面的 VBScript 樣本示範了如何開啟檔案,和如何寫資料到檔案中並從檔案讀取資料:

Sub ReadFiles
Dim fso, f1, ts, s
Const ForReading = 1
Set fso = CreateObject("Scripting.FileSystemObject")
Set f1 = fso.CreateTextFile("c:\testfile.txt", True)
' 寫一行。
Response.Write "Writing file <br>"
f1.WriteLine "Hello World"
f1.WriteBlankLines(1)
f1.Close
' 讀取檔案的內容。
Response.Write "Reading file <br>"
Set ts = fso.OpenTextFile("c:\testfile.txt", ForReading)
s = ts.ReadLine
Response.Write "File contents = '" & s & "'"
ts.Close
End Sub

==============“Cookie”技術=============

術語“Cookie”表示的是賦給客戶應用程式的字串。“Cookie”一詞來源於“magic cookie”UNIX編程概念,有時又被叫做“記號”(token)。一般來說,使用“記號”這個術語對國人來說,要比“Cookie”一詞更容易理解一些。
Cookie是一個字串,一般包含許多組變數名及變數的值,各組名和值之間用分號分隔,並且分號後還跟一個空格,變數名與變數值之間用等號分隔,一個典型的Cookie字串如下:
value1=100; value2=good; sale50
用Document對象的Cookie屬性返回當前的Cookie字串。
用document.Cookie="value1=100"的方式為Cookie賦值,如果Cookie中有這個變數,將用新值替換,如果Cookie中沒有這個變數,就會為它建立一個變數。

以上的Cookie技術將變數及變數值儲存在記憶體中,而不是硬碟中。所有的頁面共用一個Cookie空間,如果頁面A與頁面B分別在Cookie中寫入了資料,則無論在哪個頁面中用document.cookie都可以顯示出各頁面所有的Cookie資料。只要有一個IE視窗開啟就不會丟失Cookie,一旦所有的IE視窗都關閉,則所有的Cookie都被清除。

下面是我自己編寫的讀取Cookie變數的函數。

<script language="VBScript">
function ReadCookie(pCook)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'本函數用來讀取Cookie中的資料。
'流程:先刪去Cookie中pCook變數前面的字串,再刪去pCook變數後面的字串,就是pCook的值。
'輸入:要讀取的變數名。
'輸出:該變數名的值。如果沒有該變數的值,為其賦初值。
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
dim whereis_pCook '要尋找的pCook標記名在Cookie中的起始位置
dim howlong_pCook '要尋找的pCook標記名的長度
dim howlong_cookie '整個Cookie的長度
dim whereis_FenHao '尋找endstring中的分號(;)的起始位置
dim endstring '存放臨時字串,該字串經處理最後得到pCook的值

whereis_pCook = Instr(Document.Cookie,pCook)
if whereis_pCook = 0 then
'如果當前Cookie中沒有該pCook值,就為其賦初值
select case pCook
case "value1"
document.Cookie="value1=100"
endstring="100"
case "value2"
document.Cookie="value2=good"
endstring="good"
case "value3"
document.Cookie="value3=sale50"
endstring="sale50"
end select
else
howlong_pCook = len(pCook)
howlong_cookie=len(document.cookie)
'從Cookie中pCook的值開始到Cookie最後的字串。
'要注意,Cookie在各值之間用分號分隔,並且分號後還跟一個空格,所以下面的語句中有“+1”
'另外,各變數名與變數之間用等號隔,所以下面的語句中有“-1”
'當然,以上兩個量相互抵消,但為了更好地理解本語句,故仍保留
endstring = right(document.cookie,howlong_cookie - whereis_pCook + 1 - howlong_pCook - 1)
whereis_FenHao=instr(endstring,";")
'如果沒有找到分號,說明此變數是最後一個,所以endstring就是最終的結果;
'如果找到分號,就取分號前面的字串,得到最終結果。
if whereis_FenHao <> 0 then
endstring=left(endstring,whereis_FenHao - 1)
end if
end if
ReadCookie=endstring
end function
</script>

==========日曆控制項============
作業系統:Windows2000 Professional
在FrontPage2000下名為“Calendar控制項9.0”,classid="clsid:8E27C92B-1264-101C-8A2F-040224009C02"
可以用Calendar.year,Calendar.month,Calendar.day調用該控制項的年月日值,當日曆中改變年月日時分別觸發Calendar_NewYear(),Calendar_NewMonth(),Calendar_NewDay()事件。
要注意,在下拉式清單中選擇了年或月後,Calendar.year,Calendar.month,Calendar.day三個值均會被清零。

=========關於VB的顏色常數============
在VBScript中使用VBS的顏色常數會出現意想不到的顏色,比如document.bgcolor=vbYellow
不會將頁面背景顯示成黃色,而是淡藍色。
原因在於VBS的顏色常數表示方法與HTML中顏色的表示方法不同,VBS的顏色常數vbYellow的機內值是"hffff",VBS的本意是要它表示值為"ffff00"的顏色,但因為常數的機內值沒有寫成6位十六進位數,所以HTML會將其解釋為"00ffff",導致出錯。
關於VBS的顏色常數在頁面中實際顯示的顏色可以在FrontPage中實驗。在頁面屬性中選背景顏色/其它顏色,在值中直接填入VBS的顏色常數的機內值,確定後系統會把它進行轉換,得到在頁面中實際顯示的顏色。
有些VBS的顏色常數的機內值6位元是對稱的,所以會正確顯示,如vbGreen(hFF00)和vbMagenta(hFF00FF)。

=================== elements 對象 ===================
private sub window_OnLoad()
for i = 0 to 6
frmRes.elements(i).value=""
next
end sub
這段視窗初始化程式將頁面中frmRes表單的最前面7個元素(第0-第6個元素)的值清空,注意,不能將迴圈條件寫成
for i=1 to 7
因為這樣系統將認為是第1-第7個元素,系統對元素的標識是從0開始的。

====================== Set語句 =======================
dim TheForm
set TheForm = document.frmRes
上面語句設定用TheForm變數引用frmRes表單,可以減少書寫,並使對頁面的變動有更強的適應性。在程式中可以這樣引用frmRes的元素:
TheForm.txtName.focus

注意:Set語句將對象引用賦給變數或屬性,設定TheForm變數的語句前面必須要用set引導,否則將出錯。
當使用 Set 將一個對象引用賦給變數時,並不是為變數建立對象的副本,而是建立對象的引用。可有多個物件變數引用同一個對象。因為這些變數是對象引用(不是副本),所以對對象所作的任何改動都會影響所有引用該對象的變數。

===========Location對象===========
每個視窗都有一個Location對象,定義了其包含的首頁的網頁地址資訊。Location對象的主要屬性有:
href 網頁的URL
protocal 網路通訊協定
host,hostname 主機名稱
pathname 路徑
port 連接埠號碼
還可以使用 location.href=newURL 語句重新導向頁面地址。

==========window對象================
window對象的屬性和方法無需指明視窗的名稱,因此window對象的方法名稱可以看作系統的語句。如視窗的名稱可以用window.name,也可以直接用name。

status屬性是狀態列提示資訊,可用下面的語句改變狀態列的資訊:
status="I am busy! Please wait for a miniter!"

window對象的navigate方法可以重新導向頁面地址。如 navigate "http://www.sina.com.cn"

============== alert和 confirm 語句 =================
alert "比爾正在認真地進行一項生物實驗"
window對象的alert方法用來顯示提示文本,如上圖。window對象的confirm方法彈出一個含有“確定”和“取消”按鈕的對話方塊,可以用分支程式處理使用者的選擇。如上圖。
flag=prompt ("比爾進行中生物實驗嗎?")
if flag then
msgbox "進行中中……"
else
msgbox "玩去了……"
end if

========== window對象的prompt方法與InputBox函數的比較==========
window對象的prompt方法的格式為:
username=prompt ("請輸入你的名字:","Jack")
第一個參數為提示資訊,第二個參數為預設值。如上圖。InputBox函數可以顯示更個人化的輸入對話方塊,格式為:
username=InputBox ("請輸入你的名字:","輸入對話方塊","Jack")
第一個參數為提示資訊,第二個參數為對話方塊標題,第三個參數為預設值。如上圖。
prompt方法與InputBox函數基本上是一樣的,prompt方法彈出的對話方塊中有"JavaScript"字樣,而InputBox函數彈出的對話方塊中有"VBScript"字樣。

=========History對象============
history對象中包含著視窗中顯示過的首頁的列表。
forward 方法是向前翻頁,相當於IE中的“前進”按鈕。back 方法是向後翻頁,相當於IE中的[上一頁] 按鈕。forward和back方法均可以帶參數,表示前進和後退的頁數。
go 方法是轉到某個頁面,它的參數相對於當前頁面,正數是前進,負數是後退。
length 屬性是視窗顯示過的視窗的總數。

如 history.back
history.go 3


=======link對象=======
用document對象的links屬性可以訪問link對象,links屬性是一個數組,從0開始記數,包含了所有的連結化物件,其中連結化物件的順序由HTML檔案中的連結化物件的定義決定。連結化物件的屬性與視窗的location對象的屬性很相似。

以下程式將改變頁面中第一個連結的href屬性。用set語句將連結化物件的名稱賦給lnk變數的好處是,有些情況下是無法把每一個對象的名稱寫出來的(如不能用name屬性為<a>標記命名),用set語句就可以引用這個對象。

set lnk=document.links(0)
lnk.href="page-1.htm"
msgbox "連結已改成 " & lnk.href

link對象的length屬性,是首頁中所有連結化物件的個數。下面的程式將顯示出網頁中的所有連結。

dim msg , i , lnk
for i=0 to document.links.length-1
set lnk=document.links(i)
msg=msg & i+1 & "---" & lnk.href & vbCrlf
next
msgbox msg

=========Frame 對象====================
Frame對象包含在Window對象中,但實際上又相當於一個Window對象,它可以使用視窗對象的各種屬性、方法和事件,也可以包含任何視窗所能包含的對象,包括在架構對象中嵌套的其他架構對象。
一個典型的Frame嵌套的HTML源檔案,將一個視窗分成上下兩部分,再將上部分成左右兩部分,再將上左分成上下兩部分:

<frameset cols="*,505" >
<frameset rows="80,*" >
<frame name="topFrame" src="document.write-top.htm" >
<frame name="mainFrame" src="document.write-main.htm">
</frameset>
<frame name="rightFrame" src="document.write-right.htm">
</frameset >


從當前Frame訪問別的Frame,用如下的形式:
parent.FrameName.document.write "cccccccc"
無論Frame嵌套了幾層,都只需一個parent,而不必像目錄那樣一級一級地指定。

============限制文字框只能輸入數字===========
下面的程式處理文字框的OnKeyUp事件,如果按下的不是數字,將刪除最後鍵入的字元。
程式尚未解決的問題:
1.如果按下非數字鍵不放,將鍵入一串文本,而只會刪除最後一個字元。
2.如果不是在最後的位置鍵入非數字鍵,就不會糾正。

sub txtA_OnKeyUp
dim a
a=right(txtA.value,1)
if a < chr(48) or a > chr(57) then
txtA.value=left(txtA.value,len(txtA.value)-1)
end if
end sub

================== window 對象的關係 =================
===================其他 ===================
  □如果在HTML中沒有指定指令碼語言的類型,瀏覽器會預設指令碼語言為JavaScript。
  □表單<form>中的按鈕若設成submit類型,則不論其OnClick程式中有何語句,最後總要跳轉到<form>中定義的<action>頁面,所以,submit類型的按鈕不宜做檢查表單填寫是否正確的按鈕,因為即使檢查出錯誤也會跳轉到下一個表單,檢查就失去意義了。可以將其移到<form>外作為獨立的按鈕,或者將其類型設定為<button>。
  □可以用MsgBox顯示訊息框來起到“斷點”的作用。
  □focus方法使焦點移到當前元素。如 TheForm.txtPhone.focus
  □select方法使相應文字框中的全部文本處於被選中狀態。如 TheForm.txtPhone.select
  □頁面中<body>與</body>之間的內容表示為:document.body.innerHTML

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。