VBScript 是微軟以 Visual Basic 為基礎設計的腳本語言,1996 年隨 Internet Explorer 3 問世,曾經同時扮演三個角色:IE 網頁的客戶端腳本、Classic ASP 的伺服器端語言,以及 Windows 系統管理用的 .vbs 指令檔。今天沒有任何現代瀏覽器支援網頁裡的 VBScript,微軟也已宣布分階段從 Windows 移除它。這篇文章保留完整的基本語法範例供閱讀舊程式碼時對照,但把重點放在多數讀者真正需要的三件事:現況時程、與 JavaScript 的對照表,以及舊網站遇到 VBScript 該怎麼處理。本文屬於《網頁程式語言》系列,總覽請見〈網頁程式設計入門〉。
一、VBScript 是什麼?三種使用場景
VBScript(Visual Basic Scripting Edition)是微軟在 1996 年推出的直譯式腳本語言,語法沿用 Visual Basic,只能在微軟自家的執行環境中運行。它從來不是網頁標準,這一點決定了它後來的命運。實務上它出現在三個地方:
- IE 的客戶端腳本:寫在
<script type="text/vbscript">裡,只有 Internet Explorer 看得懂,Netscape、Firefox、Chrome 從一開始就不支援。這是本文語法範例的情境。 - Classic ASP 的伺服器端語言:ASP 網頁預設就是用 VBScript 寫的,在 IIS 伺服器上執行後輸出 HTML,所以和瀏覽器無關,至今仍能運作。這部分的語法與現況請看〈ASP 是什麼〉,本文不重複。
- Windows 系統腳本(.vbs):透過 Windows Script Host 執行,早年大量用於登入腳本、批次作業與自動化,這也是微軟棄用計畫真正影響的部分。
二、現況先講:IE 退役與 VBScript 棄用時程
網頁裡的 VBScript 在 2022 年 6 月 15 日 IE 11 桌面版退役後就沒有任何一般瀏覽器能執行;Windows 內建的 VBScript 引擎則自 2024 年起分三階段淘汰。依微軟公告整理如下:
| 時間 | 事件 | 對網站與企業的意義 |
|---|---|---|
| 2022 年 6 月 15 日 | IE 11 桌面應用程式退役,Windows 10 上的 IE 陸續被導向 Edge | 一般使用者已無法用瀏覽器執行網頁中的 VBScript |
| 2023 年 10 月 | 微軟將 VBScript 列入 Windows 的棄用(deprecated)功能清單 | 不再有新功能與改進,只有安全性修補 |
| 2024 年下半年起(Windows 11 24H2) | 第一階段:VBScript 改為「隨選功能」,預設仍啟用 | 現有 .vbs 與依賴它的軟體照常運作,但已是倒數 |
| 約 2027 年(微軟預告) | 第二階段:隨選功能預設不再啟用,需手動安裝 | 未遷移的內部工具會開始失效,IT 需人工介入 |
| 之後(未定) | 第三階段:自 Windows 完全移除 | VBScript 走入歷史 |
三、VBScript 基本語法範例
以下範例只能在 IE 或 Edge IE 模式執行,放在 Chrome、Firefox、Safari 會被當成看不懂的內容直接忽略,畫面不會有任何反應。保留這些範例的目的,是讓您在接手舊網站或舊系統時能看懂程式在做什麼。VBScript 有幾個和主流語言不同的特徵:不分大小寫、用單引號 ' 寫註解、字串串接用 &、區塊用 End If、Next、End Sub 這類關鍵字收尾而不是大括號。
1. 基本結構與輸出
<script type="text/vbscript">
MsgBox "Hello, VBScript!"
</script>
MsgBox 會跳出一個訊息框,相當於 JavaScript 的 alert()。
2. 變數與資料型別
VBScript 只有一種資料型別 Variant,用 Dim 宣告變數即可,型別由存進去的值決定。
Dim name, age name = "王小明" age = 30 MsgBox "姓名:" & name & vbCrLf & "年齡:" & age
vbCrLf 是內建的換行常數,訊息框會分兩行顯示姓名與年齡。
3. 條件判斷
Dim age
age = 18
If age >= 18 Then
MsgBox "您已成年"
Else
MsgBox "您尚未成年"
End If
4. 迴圈
Dim i
For i = 1 To 5
MsgBox "這是第 " & i & " 次迴圈"
Next
會連續跳出五個訊息框。除了 For...Next,VBScript 還有 Do While...Loop 與 For Each...Next。
5. 子程序與函數
Sub 是不回傳值的子程序,Function 會回傳值,回傳方式是把值指定給函數名稱本身,這是 Visual Basic 家族的特有寫法。
' 定義子程序
Sub GreetUser(name)
MsgBox "Hello, " & name
End Sub
' 呼叫子程序(呼叫 Sub 時參數不加括號)
GreetUser "Alice"
' 定義函數:把結果指定給函數名稱就是回傳
Function AddNumbers(a, b)
AddNumbers = a + b
End Function
Dim total
total = AddNumbers(5, 10)
MsgBox "5 + 10 = " & total
6. DOM 操作
<p id="demo">這是一段文字。</p>
<script type="text/vbscript">
Document.getElementById("demo").innerHTML = "這段文字已經被 VBScript 更改。"
</script>
DOM 的物件模型和 JavaScript 共用,差別只在語法外殼,所以這類程式改寫成 JavaScript 幾乎是逐行對照。
7. 表單驗證
<form name="myForm">
姓名:<input type="text" name="name"><br>
<input type="button" value="送出" onclick="ValidateForm()">
</form>
<script type="text/vbscript">
Sub ValidateForm()
If Document.myForm.name.value = "" Then
MsgBox "姓名不能為空!"
Else
MsgBox "表單送出成功!"
End If
End Sub
</script>
這是舊網站最常見的 VBScript 用法:按下按鈕時檢查欄位。也正因為如此,很多改版前的舊站在 Chrome 裡「按送出沒反應」,原因就是驗證程式是 VBScript 寫的。
四、VBScript 與 JavaScript 語法對照表
把 VBScript 改寫成 JavaScript 時,九成的工作是機械式替換。下表是最常用的對照;JavaScript 各項語法的完整教學見〈JavaScript 語法介紹〉。
| 用途 | VBScript | JavaScript |
|---|---|---|
| 宣告變數 | Dim name | let name; |
| 訊息框 | MsgBox "Hi" | alert("Hi"); |
| 字串串接 | a & b | a + b 或樣板字串 `${a}${b}` |
| 條件判斷 | If x > 1 Then ... Else ... End If | if (x > 1) { ... } else { ... } |
| 相等比較 | = | ===(避免用 ==) |
| 不等於 | <> | !== |
| 迴圈 | For i = 1 To 5 ... Next | for (let i = 1; i <= 5; i++) { ... } |
| 子程序/函數 | Sub、Function ... End Function | function name() { ... },用 return 回傳 |
| 註解 | ' 註解 | // 註解 |
| 取得元素 | Document.getElementById("x") | document.getElementById("x")(區分大小寫) |
| 大小寫 | 不區分 | 嚴格區分,這是改寫時最常出錯的地方 |
五、舊網站還有 VBScript 怎麼辦?三種情況的處理
先判斷 VBScript 跑在哪裡,處理方式完全不同。
- 情況一:跑在瀏覽器(客戶端腳本)。這部分已經在所有訪客的瀏覽器失效,不是「要不要改」而是「早就壞了」。依上一節的對照表改寫成 JavaScript 即可,表單驗證這類功能通常一兩個小時就能完成。
- 情況二:跑在伺服器(Classic ASP)。IIS 至今仍能執行 ASP 頁面,網站對外看起來一切正常,不必急著重寫;但要面對主機必須是 Windows、微軟不再更新 ASP、懂 ASP 的人越來越少三個長期成本。遷移方向與評估要點見〈ASP 是什麼〉。
- 情況三:公司內部的 .vbs 自動化腳本。這才是微軟棄用時程直接打到的對象。微軟建議的替代方案是 PowerShell,與網站無關,但建議 IT 在第二階段(預告約 2027 年)之前完成盤點。
六、我們檢查舊網站時怎麼找出 VBScript
網站改版前的技術盤點,我們會用三個訊號快速判斷舊站是否還埋著 VBScript:
- 原始碼搜尋
text/vbscript、language="vbscript"或language="VBS";只要有一處,該頁在現代瀏覽器就有失效的功能。 - 表單按鈕用
type="button"搭配onclick呼叫一個找不到 JavaScript 定義的函數名稱(例如ValidateForm()),八成是 VBScript 的 Sub。 - 在 Chrome 開發者工具的 Console 沒有任何錯誤,但按鈕就是沒反應:JavaScript 出錯會報錯,VBScript 則是整段被靜默忽略,這種「安靜的失效」是最典型的症狀。
找到之後,客戶端部分一律改寫為 JavaScript;若同一站還有 .asp 頁面,則另外評估伺服器端的處置。
七、結論
VBScript 是一段已經結束的網頁技術史:它只活在 IE,IE 退役後網頁端的 VBScript 隨之失效,Windows 端也在微軟公告的時程中逐步移除。今天學它的價值只剩一個:看懂舊程式碼,然後把它改寫成 JavaScript。
如果您的網站是 2010 年以前建置、至今沒大改版,建議直接用第六節的方法檢查一次。網頁互動功能的正確起點是 JavaScript,它是所有瀏覽器共同支援的唯一腳本語言。
八、常見問答 FAQ
VBScript 是什麼?
VBScript 現在還能用嗎?
VBScript 和 JavaScript 有什麼不同?
VBScript 和 VBA、Visual Basic 一樣嗎?
網頁裡的 VBScript 該改成什麼?
參考來源
- Microsoft Learn,〈Deprecated features for Windows client〉,Microsoft 官方文件。
- Microsoft Windows IT Pro Blog,〈VBScript deprecation: Timelines and next steps〉,Microsoft,2024。
- Microsoft Learn,〈Internet Explorer 11 desktop app retirement FAQ〉,Microsoft 官方文件。
- Microsoft Learn,〈VBScript Language Reference〉,Microsoft 官方文件。
- 新視野網頁設計,〈JavaScript 語法介紹:初學者也能看懂的完整入門教學〉,本站自有內容。
棄用時程依微軟 2024 年公告整理,第二、三階段的實際時間以微軟後續公告為準;第六節為本站網站改版前技術盤點的實務做法。