Artikel-ID: 318426 - Geändert am: Mittwoch, 25. Oktober 2006 - Version: 3.0

Update: Security Patch (Q316059) abstürzt Internet Explorer bei beim Aufrufen der execScript

Auf dieser Seite

Alles erweitern | Alles schließen

Problembeschreibung

Wenn Sie aus einem untergeordneten Frame ExecScript innerhalb eines übergeordneten Frames aufrufen, reagiert Internet Explorer nicht mehr (stürzt ab). Dieses Verhalten tritt nach der "Februar 11, 2002 Kumulativer Patch für Internet Explorer", der in der folgenden Microsoft Knowledge Base verfügbar ist:
316059  (http://support.microsoft.com/kb/316059/EN-US/ ) MS02-005: 11 Februar 2002, Kumulativer Patch für Internet Explorer

Lösung

Installieren Sie das neueste Service Pack für Internet Explorer 6, um dieses Problem zu beheben. Weitere Informationen finden Sie die folgende KB-Artikelnummer:
328548  (http://support.microsoft.com/kb/328548/EN-US/ ) So erhalten Sie das neueste Internet Explorer 6 Service Pack
Dieses Problem tritt nicht mehr in der "März 28, 2002, Kumulativer Patch für Internet Explorer". Weitere Informationen dazu, wie Sie dieses Update erhalten können, finden Sie in folgendem Artikel der Microsoft Knowledge Base:
319182  (http://support.microsoft.com/kb/319182/EN-US/ ) MS02-015: 28 März 2002, Kumulativer Patch für Internet Explorer

PROBLEMUMGEHUNG

Um zu umgehen dieses Problem mit der "Februar 11, 2002 Kumulativer Patch für Internet Explorer", verwenden Sie eine der Methoden folgen.

Hinweis : die folgenden Problemumgehungen verwenden Sie die HTML-Dateien aus dem Abschnitt "Weitere Informationen".

Ändern Sie das Skript die Funktion direkt aufrufen

Ersetzen Sie im Skript den folgenden Code
window.parent.execScript('test()');
				
mit:
window.parent.test();
				

Ändern Sie die Visual C++-Code die Funktion direkt aufrufen

Ersetzen Sie in Microsoft Visual C++, den Code aufrufen, ExecScript (die in CallExecScript implementiert ist) mit dem Code die Skript-Methode direkt aufrufen (das ist in CallDirect implementiert):
window.parent.test();void CCplusworkaroundCtrl::OnLButtonDown(UINT nFlags, CPoint point) 
{
	HRESULT hr = S_OK;

	IServiceProvider* pServiceProvider = NULL;
	hr = m_pClientSite->QueryInterface(IID_IServiceProvider, (void**)&pServiceProvider);
	ASSERT(SUCCEEDED(hr) && pServiceProvider);

	IWebBrowser2* pWebBrowser2 = NULL;
	hr = pServiceProvider->QueryService(SID_SWebBrowserApp, IID_IWebBrowser2, (void**)&pWebBrowser2);
	ASSERT(SUCCEEDED(hr) && pWebBrowser2);

	IDispatch* pDocDisp = NULL;
	hr = pWebBrowser2->get_Document(&pDocDisp);
	ASSERT(SUCCEEDED(hr) && pDocDisp);

	IHTMLDocument2* pDocument2 = NULL;
	hr = pDocDisp->QueryInterface(IID_IHTMLDocument2, (void**)&pDocument2);
	ASSERT(SUCCEEDED(hr) && pDocument2);

	IHTMLWindow2* pWindow2 = NULL;
	hr = pDocument2->get_parentWindow(&pWindow2);
	ASSERT(SUCCEEDED(hr) && pWindow2);

	IHTMLWindow2* pWindowTop = NULL;
	hr = pWindow2->get_top(&pWindowTop);
	ASSERT(SUCCEEDED(hr) && pWindowTop);

	CallDirect(pWindowTop);
	CallExecScript(pWindowTop);

	pWindowTop->Release();
	pWindow2->Release();
	pDocument2->Release();
	pDocDisp->Release();
	pWebBrowser2->Release();
	pServiceProvider->Release();
}

void CCplusworkaroundCtrl::CallExecScript(IHTMLWindow2* pWindow2)
{
	ASSERT(pWindow2);
	HRESULT hr = S_OK;

	BSTR bstrCode = ::SysAllocString(L"test()");
	BSTR bstrLanguage = ::SysAllocString(L"vbscript");

	COleVariant ret;
	hr = pWindow2->execScript(bstrCode, bstrLanguage, &ret);
	
	::SysFreeString(bstrLanguage);
	::SysFreeString(bstrCode);
}

void CCplusworkaroundCtrl::CallDirect(IHTMLWindow2* pWindow2)
{
	DISPID dispidScriptObject, dispidMethodToInvoke;
	IDispatch *pDispScriptObject;
	DISPPARAMS dispparamsNoArgs = { NULL, NULL, 0, 0};
	HRESULT hr;
	OLECHAR *szScript = L"script";
	OLECHAR *szFuncName = L"test";
	
	IHTMLDocument2* pDocument2 = NULL;
	hr = pWindow2->get_document(&pDocument2);
	ASSERT(SUCCEEDED(hr) && pDocument2);

	IDispatch* pDocDisp = NULL;

	hr = pDocument2->QueryInterface(IID_IDispatch, (void**)&pDocDisp);
	ASSERT(SUCCEEDED(hr) && pDocDisp);

	// Get the DISPID of the document's Script property.
	hr = pDocDisp->GetIDsOfNames(IID_NULL, &szScript,
		1, LOCALE_USER_DEFAULT, &dispidScriptObject);
	ASSERT(SUCCEEDED(hr));

	COleVariant varResult;
	
	// Get the document's Script property.
	hr = pDocDisp->Invoke(dispidScriptObject,
		IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET,
		&dispparamsNoArgs, &varResult, NULL, NULL);
	ASSERT(SUCCEEDED(hr) && varResult.pdispVal);

	pDispScriptObject = varResult.pdispVal;

	varResult.Clear();	
	// Get the DISPID of the script method to invoke.
	hr = pDispScriptObject->GetIDsOfNames(IID_NULL, &szFuncName, 1, 
		LOCALE_USER_DEFAULT, &dispidMethodToInvoke);
	ASSERT(SUCCEEDED(hr));

	// Invoke the script method.
	hr = pDispScriptObject->Invoke(dispidMethodToInvoke, IID_NULL,
		LOCALE_USER_DEFAULT, DISPATCH_METHOD, &dispparamsNoArgs, 
		&varResult, NULL, NULL);
	ASSERT(SUCCEEDED(hr));

	pDocDisp->Release();
	pDocument2->Release();
}
				

Entfernen der "Februar 11, 2002 Kumulativer Patch für Internet Explorer"

Als letzte Möglichkeit können Sie die vorherige Version von Internet Explorer nach der Version können wiederherstellen, dass Sie vor der Installation des Sicherheitspatches mussten.

wichtig : Diese Problemumgehung stellt Sie für die Sicherheitsprobleme, die Q316059 behebt. Müssen Sie den vorherigen Sicherheitspatch installieren, der aus der folgenden Microsoft Knowledge Base-Artikel verfügbar ist:
313675  (http://support.microsoft.com/kb/313675/EN-US/ ) MS01-058: Datei Sicherheitsanfälligkeit Patch für Internet Explorer 5.5 und Internet Explorer 6
Verwenden Sie diese Problemumgehung nicht, wenn Sie sicher sind, dass es absolut notwendig ist. Diese Problemumgehung bietet nur eine temporäre Umgehungsmöglichkeit. Denken Sie daran, Internet Explorer zu aktualisieren, sobald der nächste Sicherheitspatch verfügbar ist.
  1. Doppelklicken Sie in der Systemsteuerung auf Software .
  2. Klicken Sie unter Zurzeit installierte Programme auf Microsoft Internet Explorer .
  3. Klicken Sie im linken Bereich auf Ändern/Entfernen .
  4. Klicken Sie auf Vorherige Windows-Konfiguration wiederherstellen , und klicken Sie dann auf OK .
  5. Starten Sie Ihren Computer neu, nach dem Wiederherstellen der früheren Version von Internet Explorer.
  6. Finden Sie auf der folgenden Microsoft-Website downloaden und die Version von Internet Explorer installieren, die Sie:
    http://www.microsoft.com/ie (http://www.microsoft.com/ie)
Wenn Sie keine Wiederherstellungsoption für Internet Explorer (beispielsweise, wenn Sie Microsoft Windows XP verwenden), müssen Sie manuell die Dateien "Mshtml.dll" und Mshtml.tlb mit den älteren Versionen dieser Dateien ersetzen. Die älteren Versionen dieser Dateien befinden sich in Q313675 im abgesicherten Modus. Obwohl Sie die MSHTML-Originaldateien von der Windows XP-CD verwenden können, bieten diese Dateien nicht so viel Sicherheit.

Weitere Informationen dazu, wie Internet Explorer deinstallieren, finden Sie die Artikelnummern unten klicken, um die Artikel der Microsoft Knowledge Base:
293907  (http://support.microsoft.com/kb/293907/EN-US/ ) Deinstallieren von Internet Explorer 6

Status

Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel Microsoft-Produkten handelt. Dieses Problem wurde erstmals in Internet Explorer 6 Service Pack 1 behoben.

Weitere Informationen

Schritte zum Reproduzieren des Verhaltens

  1. In Notepad, erstellen eine neue Datei mit dem Namen Parent.html und fügen Sie folgenden Code:
    <html>
    <title>Internet Explorer Crashes When You Call execScript Within a Parent Frame from a Child Frame</title>
        <head>
            <script>
                function test()
                {
                    alert("test");
                }
            </script>
        </head>
        <body>
             <iframe src="child.html"></iframe>
        </body>
    </html>
    					
  2. Speichern Sie Parent.html auf Ihrem Webserver.
  3. Eine neue Datei mit dem Namen Child.html erstellen und fügen Sie den folgenden Code:
    <html>
        <head>
             <script>
    			function Test()
    			{
    				window.parent.execScript('test()');
    //Comment the above line and uncomment the following line to work around the problem
    				//window.parent.test();
    			}
             </script>
        </head>
        <body>
    Click this button to run a script within the parent frame<br></br>
    <button onclick=Test()>Click</button>
        </body>
    </html>
    					
  4. Speichern Sie Child.html auf Ihrem Webserver.
  5. Wechseln Sie zu der Seite Parent.html, und klicken Sie dann, die das Skript ausgeführt werden sollen.

Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Internet Explorer (Programming) 5.5 SP2
Keywords: 
kbmt kbbug kbfix kbie600sp1fix KB318426 KbMtde
Maschinell übersetzter ArtikelMaschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 318426  (http://support.microsoft.com/kb/318426/en-us/ )
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
Retired KB ArticleDisclaimer zu nicht mehr gepflegten KB-Inhalten
Dieser Artikel wurde für Produkte verfasst, für die Microsoft keinen Support mehr anbietet. Der Artikel wird deshalb in der vorliegenden Form bereitgestellt und nicht mehr weiter aktualisiert.
 

SPRACHE AUSWÄHLEN