A 974455. számú összegző biztonsági frissítés telepítése után az Internet Explorer böngészőben típuseltérésről tájékoztató VBScript-hibaüzenet jelenhet meg
jelű biztonsági közlemény ismertet, típusellenőrzést vezetett be különféle metódusokba bizonyos biztonsági rések elhárítása érdekében. Egyes helyzetekben ezek az új biztonsági ellenőrzések típuseltérési hibát okozhatnak a VBScript-parancsfájlokat használó, illetve a VBScript- és JavaScript-kódot egyszerre futtató weblapokon.
Az MS09-054 jelű összegző biztonsági frissítésről a Microsoft Tudásbázis alábbi cikkében tájékozódhat:
Típuseltérésről tájékoztató hibaüzenet jelenhet meg azoknak a weblapoknak az esetében, amelyek ügyféloldali parancsnyelvként VBScriptet alkalmaznak, és a showModalDialog() vagy a showModelessDialog() metódust is használják. A Microsoft megállapította, hogy az alábbi három esetben történhet típuseltérési hiba:
showModalDialog()
Az első eset az, ha a VBScript-parancsfájl egy Array() értéket ad át paraméterként a showModalDialog() metódusnak. A showModalDialog() metódus egy kötelező argumentumot (sURL), illetve két nem kötelező argumentumot (vArguments és sFeatures) támogat. A vArguments paraméter egy VARIANT típusú paraméter, mely a dokumentum megjelenítésekor használandó argumentumokat határozza meg. Ha a fejlesztő úgy dönt, hogy Array() értéket ad át közvetlenül a nem kötelező vArguments paraméterként, az típuseltérési hibához vezet.
A showModalDialog metódusról további tájékoztatást a Microsoft MSDN alábbi weblapján talál:
showModelessDialog()
A második eset az, ha a VBScript-parancsfájl egy Array() értéket ad át paraméterként a showModelessDialog() metódusnak. A showModelessDialog() metódus egy kötelező argumentumot (sURL), illetve két nem kötelező argumentumot (vArguments és sFeatures) támogat. A vArguments paraméter egy VARIANT típusú paraméter, mely a dokumentum megjelenítésekor használandó argumentumokat határozza meg. Ha a fejlesztő úgy dönt, hogy Array() értéket ad át közvetlenül a nem kötelező vArguments paraméterként, az típuseltérési hibához vezet.
A showModelessDialog metódusról további tájékoztatást a Microsoft MSDN alábbi weblapján talál:
returnValue
A harmadik esetben egy modális párbeszédpanel returnValue értékének explicit beállítása okozza a problémát. A returnValue egy olvasható és írható tulajdonság, melynek nincs alapértelmezett értéke. Az MSDN webhelyen lévő dokumentáció szerint a returnValue tulajdonság kizárólag a showModalDialog() metódussal létrehozott ablakok esetében érvényes. Ha a fejlesztő úgy dönt, hogy egy modális párbeszédpanel returnValue tulajdonságának értékét explicit módon Array() értékre állítja, az típuseltérési VBScript-hibához vezet.
A returnValue tulajdonságról további tájékoztatást a Microsoft MSDN alábbi weblapján talál:
A Microsoft eddigi eredményei szerint a 974455. számú összegző biztonsági frissítéssel kapcsolatos típuseltérési hiba nem jelentkezik azoknál a weblapoknál, amelyek kizárólag JavaScriptet használnak ügyféloldali parancsnyelvként. A probléma csak a VBScript környezetet, illetve azon belül is a showModalDialog() metódus, a showModelessDialog() metódus és a returnValue tulajdonság használatát érinti. A VBScript és a JavaScript parancsnyelvet vegyesen alkalmazó weblapok esetében a hiba a korábban tárgyalt metódusok és tulajdonság használatakor léphet fel, illetve akkor, ha a weblap VBArray objektumot használ. A VBArray objektum használata ritka, ezért a jelen cikk az ezzel kapcsolatos problémákat nem tárgyalja.
jelű összegző biztonsági frissítése az Internet Explorer korábban azonosított biztonsági réseinek javítására lett kiadva. Az összegző biztonsági frissítés részeként új ellenőrzési lépéseket vezettünk be a VARIANT típusú paraméterek veszélyes adattípusokra való véletlen konvertálásának megelőzése érdekében. A hozzáadott biztonsági ellenőrzések tovább növelik a felhasználói változóként átadott VARIANT típusú paraméterekre vonatkozó megkötéseket, hogy ezzel megóvják a felhasználót bizonyos támadásokkal szemben. Ez a szigorúbb ellenőrzés a VARIANT adattípust szabályosan használható webhelyeket is érintheti.
A probléma elhárításához telepítse a 976749. számú frissítést, miután telepítette a 974455. számú biztonsági frissítést.
A problémáról a Microsoft Tudásbázis alábbi cikkében tájékozódhat:
Megjelent egy frissítés az Internet Explorer programhoz, amely a KB974455 (MS09-054) jelű biztonsági frissítés telepítése után bekövetkező problémák megszüntetéséhez szükséges
Fontos: Ha nem telepítette a 974455. számú biztonsági frissítést, ne telepítse a 976749. számú frissítést, ellenkező esetben előfordulhat, hogy az Internet Explorer böngésző nem fog megfelelően működni. Ha ez megtörténne, távolítsa el a 976749. számú frissítést, telepítse a 974455. számú biztonsági frissítést, majd telepítse újra a 976749. számú frissítést.
Ha a jelen cikkben ismertetett jelenségeket tapasztalja, tanácsos folytatni a 974455. számú összegző biztonsági frissítés telepítését, illetve telepíteni a 976749. számú frissítést. Az összegző biztonsági frissítés eltávolítása biztonsági kockázatot jelent.
A jelenségeket ismertető bekezdésben tárgyalt első és második helyzet esetén egy kerülő megoldást is alkalmazhat, ha nem kívánja telepíteni a 974455. számú biztonsági frissítést. A probléma kerülő megoldásához explicit módon deklarálnia kell az Array() változót egy VBScript változóvá. A tömbök showModalDialog() vagy showModelessDialog() metódusnak való átadása nem okoz típuseltérési hibát.
Az alábbi VBScript-kód például típuseltérési hibához vezet.
Az alábbi VBScript-kód típuseltérési hiba nélkül ad át egy tömböt a showModialDialog() vagy showModelessDialog() metódusnak.
// NINCS TÍPUSELTÉRÉSI HIBA
Dim sajatTomb
sajatTomb=Array(1,2,3,4,5,6,7)
vReturn = window.showModalDialog("http://www.contoso.com", sajatTomb)
A korábban ismertetett helyzetek közül a harmadiknál létezik egy kerülő megoldás arra az esetre, ha nem kívánja telepíteni a 974455. számú frissítést. Azokban az esetekben, amelyekben egy egydimenziós Array() értéket kell átadnia a returnValue tulajdonságnak, használja a Join és a Split VBScript-függvényt. Ily módon közvetve Array() értékeket is adhat át a returnValue tulajdonságnak.
Az alábbi VBScript-kód például típuseltérési hibát okoz.
A Join és a Split VBScript-függvény használatakor típuseltérési hiba nélkül állíthatja be a returnValue tulajdonság értékét.
// NINCS TÍPUSELTÉRÉSI HIBA
Dim tombElemek
tombElemek(0) = 1
tombElemek(1) = 2
tombElemek(2) = 3
Dim tombSzoveg = Join(tombElemek, ";")
Window.returnvalue = tombSzoveg
Dim ideigSzoveg = window.showModalDialog( )
Dim tombElemek = Split(ideigSzoveg, ";")
Az alábbiakban a harmadik eset azon előfordulásainak kerülő megoldását láthatja, amelyeknél több dimenziós vagy objektumokat tartalmazó Array() értéket kell átadnia a returnValue tulajdonságnak. Kerülő megoldásként itt JavaScript-függvénnyel kell beállítania a returnValue tulajdonság értékét. A használandó JavaScript-függvény elérhető VBScript-szubrutinokkal és -függvényekkel, és a returnValue tulajdonság JavaScript-függvénnyel beállított értéke is elérhető marad a VBScript-parancsfájlnak.
Az alábbi VBScript-kód például típuseltérési hibát okoz.
// TÍPUSELTÉRÉSI HIBA
<script LANGUAGE=vbscript>
Option Explicit
Sub Window_OnLoad
Dim abc(1,2,3)
Window.ReturnValue = abc
End Sub
</script>
A JavaScript-függvény meglévő VBScript-kóddal való együttes használata lehetővé teszi, hogy típuseltérési hiba nélkül állítsa be a returnValue tulajdonság értékét.
// NINCS TÍPUSELTÉRÉSI HIBA
<script Language=JavaScript>
function visszateresiErtekBeall(){
var visszateresiErtekTomb = new Array();
visszateresiErtekTomb[0] = 1;
visszateresiErtekTomb[1] = 2;
visszateresiErtekTomb[2] = 3;
window.returnValue = visszateresiErtekTomb;
}
</script>
<script LANGUAGE=vbscript??
Option Explicit
Sub Window_OnLoad
visszateresiErtekBeall()
msgbox window.returnValue
End Sub
</script>
A Microsoft tudásbázisban szolgáltatott információkat "az adott állapotban", bárminemű szavatosság vagy garancia nélkül biztosítjuk. A Microsoft kizár mindennemű, akár kifejezett, akár vélelmezett szavatosságot vagy garanciát, ideértve a forgalomképességre és az adott célra való alkalmasságra vonatkozó szavatosságot is. A Microsoft Corporation és annak beszállítói semmilyen körülmények között nem felelősek semminemű kárért, így a közvetlen, a közvetett, az üzleti haszon elmaradásából származó vagy speciális károkért, illetve a kár következményeként felmerülő költségek megtérítéséért, még abban az esetben sem, ha a Microsoft Corporationt vagy beszállítóit az ilyen károk bekövetkeztének lehetőségére figyelmeztették. Egyes államok joga nem teszi lehetővé bizonyos károkért a felelősség kizárását vagy korlátozását, ezért a fenti korlátozások az ön esetében esetleg nem alkalmazhatók.
Köszönjük! Ez az információ segítséget nyújt számunkra, hogy fejlesszük a támogatási tartalmat. További támogatási lehetőségekért keresse fel a következő webhelyet: Súgó és támogatási webhely.