Ett skriptfelmeddelande om VBScript-typfel i Internet Explorer visas när du har installerat den kumulativa säkerhetsuppdateringen 974455

INLEDNING
Den kumulativa säkerhetsuppdateringen för Internet Explorer 974455 (beskrivs i MS09-054) införde ytterligare "typsäkerhetskontroller" i olika metoder för att åtgärda identifierade säkerhetsluckor. I vissa scenarier kan de här nya typsäkerhetskontrollerna leda till typskriptfel på webbsidor där VBScript används eller där en blandning av VBScript och JavaScript används.

Om du vill veta mer om MS09-054 klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:
974455MS09-054: Kumulativ säkerhetsuppdatering för Internet Explorer
Symptom
Webbsidor där VBScript används som skriptspråk på klientsidan och där metoderna showModalDialog() eller showModelessDialog() används, kan uppvisa skriptfelet typfel. Microsoft har identifierat följande tre scenarier där detta typfel kan uppstå.
  • showModalDialog()
    I det första scenariet skickas ett Array()-värde som parameter till metoden showModalDialog() i VBScript. Metoden showModalDialog() har stöd för ett obligatoriskt argument (sURL) och två valfria argument (vArguments och sFeatures). Parametern vArguments är en VARIANT-typparameter som anger argumenten som ska användas när dokumentet visas. Om en utvecklare skickar ett Array()-värde direkt till den valfria vArguments-parametern uppstår ett typfel.

    Mer information om showModalDialog-metoden finns på följande Microsoft MSDN-webbsida:
  • showModelessDialog()
    I det andra scenariet skickas ett Array()-värde som parameter till metoden showModelessDialog() i VBScript. Metoden showModelessDialog() har stöd för ett obligatoriskt argument (sURL) och två valfria argument (vArguments och sFeatures). Parametern vArguments är en VARIANT-typparameter som anger argumenten som ska användas när dokumentet visas. Om en utvecklare skickar ett Array()-värde direkt till den valfria vArguments-parametern uppstår ett typfel.

    Mer information om showModelessDialog-metoden finns på följande Microsoft MSDN-webbsida:
  • returnValue
    I det tredje scenariet anges explicit inställningen för returnValue-egenskapen för ett Modal Dialog-fönster. returnValue-egenskapen är en läs/skriv-egenskap som inte har något standardvärde. Enligt MSDN-dokumentationen gäller returnValue-egenskapen endast de fönster som har skapats med metoden showModalDialog(). Om en utvecklare explicit anger inställningen för returnValue-egenskapen för ett Modal Dialog-fönster till ett Array()-värde i VBScript, uppstår ett typfel.

    Mer information om return Value-egenskapen finns på följande Microsoft MSDN-webbsida:
Microsoft har för närvarande inte observera några typfel orsakade av den kumulativa säkerhetsuppdateringen 974455 på webbsidor som använder JavaScript som enda skriptspråk på klientsidan. Problemet verkar endast gälla webbsidor som använder metoden showModalDialog(), metoden ShowModelessDialog() eller returnValue-egenskapen med VBScript. Om webbsidan innehåller en blandning av VBScript och JavaScript, kan felet uppstå om de tidigare beskrivna metoderna eller egenskaperna i VBScript används på webbsidan, eller om VBArray-objeket används. Det är ovanligt att VBArray-objektet används och scenarier med VBArray beskrivs inte i den här Knowledge Base-artikeln.
Orsak
Den kumulativa säkerhetsuppdatering för Internet Explorer MS09-054 gavs ut för att åtgärda identifierade säkerhetsluckor i Internet Explorer. Som en del av den kumulativa säkerhetsuppdateringen införde Internet Explorer nya kontroller av oönskade sändningar av VARIANT-typparametrar till farliga datatyper. De extra säkerhetskontrollerna medför ytterligare säkerhetsbegränsningar för VARIANT-typparametrar som skickas som en del av användarkontrollerade variabler för att skydda användaren från vissa angrepp. Dessa ytterligare kontroller kan påverka vanliga surfningsscenarier där VARIANT-datatyper används.
Lösning
Du löser problemet genom att installera uppdatering 976749 efter att ha installerat säkerhetsuppdatering 974455. Om du vill veta mer om det här problemet klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:
976749Det finns en uppdatering för Internet Explorer som löser problem som uppstår när du har installerat säkerhetsuppdatering 974455 (MS09-054)

Viktigt! Installera inte uppdatering 976749 utan att först ha installerat säkerhetsuppdatering 974455. Annars kanske Internet Explorer inte fungerar som det ska. Om detta inträffar avinstallerar du uppdatering 976749, installerar säkerhetsuppdatering 974455 och installerar sedan om uppdatering 976749.
Workaround
Vi rekommenderar att du fortsätter använda den kumulativa säkerhetsuppdateringen 974455 och att du installerar uppdatering 976749 om du får de problem som beskrivs i den här artikeln. Kunder som väljer att ta bort den kumulativa säkerhetsuppdateringen utsätter sina datorer för stora risker.

I det första och andra scenariet som beskrivs i avsnittet "Symptom", kan du använda en tillfällig lösning om du inte vill installera säkerhetsuppdatering 974455. Du löser problemet tillfälligt genom att explicit ange variabeln Array() i en VBScript-variabel. Arrays kan skickas till metoderna showModalDialog() eller showModelessDialog() utan att något typfel uppstår.

Följande VBScript orsakar exempelvis ett typfel.
// TYPE MISMATCHvReturn = window.showModalDialog("http://www.contoso.com", Array(1,2,3,4,5,6,7))
Följande VBScript skickar ett array-värde till metoderna showModialDialog() eller showModelessDialog() utan att ett typfel uppstår.
// NO TYPE MISMATCH ERRORDim myArraymyArray=Array(1,2,3,4,5,6,7)vReturn = window.showModalDialog("http://www.contoso.com", myArray)
I det tredje scenariet kan du använda en tillfällig lösning om du inte vill installera säkerhetsuppdatering 974455. Du undviker problemet i scenarier där ett värde för en enkel dimensions-Array() skickas till egenskapen returnValue, genom att använda VBScript-funktionerna Join och Split. På så vis kan du skicka Array()-värden till returnValue-egenskapen.

Exempel: följande VBScript generar ett typfel.
// TYPE MISMATCHDim arrayItemsarrayItems(0) = 1arrayItems(1) = 2arrayItems(2) = 3Window.returnvalue = arrayItems
När du använder VBScript-funktionerna Join och Split, kan du ange returnValue-egenskapen utan att något skripttypfel genereras.
// NO TYPE MISMATCH ERRORDim arrayItemsarrayItems(0) = 1arrayItems(1) = 2arrayItems(2) = 3Dim arrString = Join(arrayItems, ";")Window.returnvalue = arrStringDim strTemp = window.showModalDialog(……)Dim arrayItems = Split(strTemp, ";")
I det tredje scenariet ovan, där flerdimensionella Array()-värden eller Array()-värden som har objekt skickas till egenskapen returnValue, kan du införa en tillfällig lösning om du inte vill installera säkerhetsuppdatering 974455. Undvik problemet genom att ange egenskapen returnValue med hjälp av en JavaScript-funktion. JavaScript-funktionen är tillgänglig för VBScript-subrutiner och funktioner. Alla returnValue-egenskapsvärden som anges av en JavaScript-funktion är tillgängliga i VBScript.

Exempel: följande VBScript generar ett typfel.
// TYPE MISMATCH<script LANGUAGE=vbscript>Option ExplicitSub Window_OnLoadDim abc(1,2,3)Window.ReturnValue = abcEnd Sub</script>
Om du anger en JavaScript-funktion tillsammans med befintligt VBScript kan du ange returnValue-egenskapen utan att något typfel genereras.
// 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>
Status
Microsoft har bekräftat att detta är ett problem i Microsoft-produkterna som nämns i avsnittet "Gäller" i den här artikeln.
Egenskaper

Artikel-id: 976949 – senaste granskning 12/03/2009 15:10:11 – revision: 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
Feedback