您目前已離線,請等候您的網際網路重新連線

安裝累積安全性更新 974455 後,您在 Internet Explorer 中收到 VBScript「類型不符」指令碼錯誤訊息

簡介
Internet Explorer 的累積安全性更新 974455 (於 MS09-054 中所述) 會將額外的「類型」安全性檢查引用到各種方法以解決可辨識的安全性弱點。在特定情況下,這些新的類型安全性檢查可能會在使用 VBScrip 的網頁中,或者在混合使用 VBScript 和 JavaScript 的網頁中,導致「類型不符」指令碼錯誤。

如需有關 MS09-054 的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
974455MS09-054:Internet Explorer 的累積安全性更新
徵狀
使用 VBScript 做為用戶端指令碼語言以及使用 showModalDialog() 或 showModelessDialog() 方法的網頁,可能會遇到「類型不符」指令碼錯誤。Microsoft 已發現下列三種情況會產生「類型不符」指令碼錯誤:
  • showModalDialog()
    第一種情況為當您將 Array() 值做為參數傳遞至 VBScript 中的 showModalDialog() 方法時。showModalDialog() 方法支援一個必要的引數 (sURL) 及兩個選用的引數 (vArguments 和 sFeatures)。vArguments 參數是一個 VARIANT 類型參數,可在顯示文件時指定要使用的引數。如果開發人員決定直接將 Array() 傳遞到選用的 vArguments 參數,則會發生「類型不符」指令碼錯誤。

    如需有關 showModalDialog 方法的詳細資訊,請造訪下列 Microsoft MSDN 網頁 :
  • showModelessDialog()
    第二種情況為當您將 Array() 值做為參數傳遞至 VBScript 中的 showModelessDialog() 方法時。showModelessDialog() 方法支援一個必要的引數 (sURL) 及兩個選用的引數 (vArguments 和 sFeatures)。vArguments 參數是一個 VARIANT 類型參數,可在顯示文件時指定要使用的引數。如果開發人員決定直接將 Array() 傳遞到選用的 vArguments 參數,則會發生「類型不符」指令碼錯誤。

    如需有關 showModelessDialog 方法的詳細資訊,請造訪下列 Microsoft MSDN 網頁 :
  • returnValue
    第三種情況為 [Modal Dialog] 視窗的 returnValue 屬性明確設定。returnValue 屬性為可讀取/寫入的屬性,沒有預設值。根據 MSDN 的說明文件,returnValue 屬性只適用於使用 showModalDialog() 方法建立的視窗。如果開發人員決定將 [Modal Dialog] 視窗的 returnValue 屬性明確設定為 VBScript 中的 Array() 值,則會發生「類型不符」指令碼錯誤。

    如需有關 return Value 屬性的詳細資訊,請造訪下列 Microsoft MSDN 網頁 :
Microsoft 目前尚未發現使用 JavaScript 做為其單一用戶端指令碼語言之網頁中的累積安全性更新 974455,有產生「類型不符」指令碼錯誤的狀況。只有在 VBScript 中使用 showModalDialog() 方法、showModelessDialog() 方法或 returnValue 屬性的網頁會受到影響。如果網頁同時包含 VBScript 和 JavaScript,且使用在 VBScript 中稍早所述的方法或屬性,或如果使用 VBArray 物件,則該網會便會受到影響。使用 VBArray 物件的狀況不常見,因此此知識庫文件將不涵蓋有關 VBArray 的情況。
發生的原因
Internet Explorer 累積安全性更新 MS09-054 發行的目的在於解決 Internet Explorer 中可識別的安全性弱點。做為累積安全性更新的一部分,Internet Explorer 會引用新的檢查,以免將 VARIANT 類型參數錯誤轉換成危險的資料類型。為了保護使用者免於遭受特定類型的攻擊,額外的安全性檢查會對用來傳遞為部分使用者控制之變數的 VARIANT 類型參數,增加更多的安全性限制。這些額外的檢查可能會影響使用 VARIANT 資料型類進行正常瀏覽的情況。
解決方案
如果要解決這個問題,請在安裝安全性更新 974455 之後,安裝更新 976749。如需有關這個問題的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
976749 已有可用的 Internet Explorer 更新可以解決在您套用安全性更新 974455 (MS09-054) 之後發生的問題

重要 如果您尚未安裝安全性更新 974455,則請勿安裝更新 976749。如果您沒有先安裝安全性更新 974455 就安裝更新 976749,Internet Explorer 可能無法正常運作。如果發生這種情況,請解除安裝更新 976749、安裝安全性更新 974455,然後重新安裝更新 976749。
其他可行方案
如果您遇到本文所述的徵狀,我們建議您持續套用累積安全性更新 974455並安裝更新 976749。決定移除累積安全性更新的客戶將使其系統處於危險之中。

如果您遇到<徵狀>一節所述的第一種和第二種情況,但不想安裝安全性更新 974455 的話,您可以執行解決方案。如果要解決這個問題,請將 Array() 變數明確宣告為 VBScript 變數。陣列便可傳遞至 showModalDialog() 或 showModelessDialog() 方法,而不會發生「類型不符」指令碼錯誤。

舉例來說,下列 VBScript 會造成「類型不符」指令碼錯誤。
// TYPE MISMATCHvReturn = window.showModalDialog("http://www.contoso.com", Array(1,2,3,4,5,6,7))
下列 VBScript 可將陣列傳遞至 showModialDialog() 或 showModelessDialog() 方法,而不會發生「類型不符」指令碼錯誤。
// NO TYPE MISMATCH ERRORDim myArraymyArray=Array(1,2,3,4,5,6,7)vReturn = window.showModalDialog("http://www.contoso.com", myArray)
如果您遇到稍早所述的第三種情況,但不想安裝安全性更新 974455 的話,您可以執行解決方案。如果要解決單一維度 Array() 值傳遞至 returnValue 屬性的問題,請使用聯結與獨立 VBScript 函數。此功能可讓您將 Array() 值傳遞至 returnValue 屬性。

舉例來說,下列 VBScript 會產生「類型不符」指令碼錯誤。
// TYPE MISMATCHDim arrayItemsarrayItems(0) = 1arrayItems(1) = 2arrayItems(2) = 3Window.returnvalue = arrayItems
當您使用聯結與獨立 VBScript 函數時,您可以設定 returnValue 屬性,而不會產生「類型不符」指令碼錯誤。
// NO TYPE MISMATCH ERRORDim arrayItemsarrayItems(0) = 1arrayItems(1) = 2arrayItems(2) = 3Dim arrString = Join(arrayItems, ";")Window.returnvalue = arrStringDim strTemp = window.showModalDialog(……)Dim arrayItems = Split(strTemp, ";")
如果您遇到稍早所述的第三種情況,也就是多維度 Array() 值或包含物件的 Array() 值傳遞至 returnValue 屬性,但不想安裝安全性更新 974455 的話,您可以執行解決方案。如果要解決此情況中的問題,您可以使用 JavaScript 函數來設定 returnValue 屬性。VBScript 副程式和函數可使用此 JavaScript 函數。VBScript 將可使用任何由 JavaScript 函數所設定的 returnValue 屬性值。

舉例來說,下列 VBScript 會產生「類型不符」指令碼錯誤。
// TYPE MISMATCH<script LANGUAGE=vbscript>Option ExplicitSub Window_OnLoadDim abc(1,2,3)Window.ReturnValue = abcEnd Sub</script>
將 JavaScript 函數與現有的 VBScript 搭配使用可讓您設定 returnValue 屬性,而不會產生「類型不符」指令碼錯誤。
// NO TYPE MISMATCH ERROR<script Language=JavaScript>function setReturnValue(){var returnValueArray= new Array();returnValueArray[0] = 1;returnValueArray[1] = 2;returnValueArray[2] = 3;window.returnValue = returnValueArray;}</script><script LANGUAGE=vbscript??Option ExplicitSub Window_OnLoadsetReturnValue()msgbox window.returnValueEnd Sub</script>
狀況說明
Microsoft 已確認本篇文章<適用於>一節所列之 Microsoft 產品確實有上述問題。
內容

文章識別碼:976949 - 最後檢閱時間:12/03/2009 19:38:16 - 修訂: 3.1

Windows Internet Explorer 8, Windows Internet Explorer 7, Microsoft Internet Explorer 6.0, Microsoft Internet Explorer 6.0 SP1, Microsoft Internet Explorer 5.01 Service Pack 4

  • kbcode kbtshoot kbbug kbexpertiseinter kbsecurity kbsecvulnerability kbsurveynew KB976949
意見反應