Artikel-ID: 253201 - Geändert am: Montag, 12. Mai 2003 - Version: 2.0

Fehler: OnBeforeUnload() wird nicht ausgelöst, wenn WebBrowser-Steuerelements

SystemtippDieser Artikel bezieht sich auf ein anderes Betriebssystem als das von Ihnen verwendete. Für Sie möglicherweise nicht relevante Artikelinhalte wurden deaktiviert.

Auf dieser Seite

Alles erweitern | Alles schließen

Problembeschreibung

Wenn ein Webbrowser-Steuerelement in einem Microsoft Visual C++ oder Microsoft Visual Basic-Anwendung zu hosten, wird eine HTML-Seite onbeforeunload-Ereignishandler nie aufgerufen wenn die Anwendung beendet wird, obwohl der OnUnload-Ereignishandler aufgerufen wird. Der Handler wird ordnungsgemäß aufgerufen, wenn die Seite in einer eigenständigen Instanz von Internet Explorer anzeigen.

Ursache

In Internet Explorer dieses Ereignis ausgelöst wird von außerhalb der WebBrowser durch Aufrufen der WebBrowser-Steuerelement ist mit der OLECMDID_ONUNLOAD-Methode Exec() des IOleCommandTarget.

Lösung

Um dieses Problem zu beheben, senden Sie dem WebBrowser den OLECMDID_ONUNLOAD-Befehl in der Host-Anwendung. Dies kann durch Aufrufen des WebBrowser-Steuerelements ExecWB()-Methode erfolgen.

Um Internet Explorer-Verhalten zu emulieren, müssen Sie den Rückgabewert der ExecWB des viertes Argument, untersuchen, die Ihnen, mitteilt unabhängig davon, ob der Versuch zum Herunterfahren ist fehlgeschlagen oder wurde erfolgreich abgeschlossen. Dies ist da Skript Autoren das onbeforeunload-Ereignis verwenden können, um den Benutzer aufzufordern, ob für die Seite oder nicht verlassen werden soll. Wenn der Benutzer Nein beantwortet, sollte dem WebBrowser aktiviert bleiben.

Visual C++

HRESULT hr;
VARIANT vOut;
VariantInit(&vOut);
hr = pWebBrowser2->ExecWB(OLECMDID_ONUNLOAD, OLECMDEXECOPT_DODEFAULT, NULL, &vOut);
if (SUCCEEDED(hr)) {
    // Check VT_BOOL return value of vOut to make sure we're really shutting down - IE or the user
    // might decide not to honor this request.
    if (vOut.bVal == TRUE) {
        // Continue shutdown process
    } else {
        // recover
    }
}
				

Visual Basic

Public Sub Form_Unload(Cancel as Integer)
    WebBrowser1.ExecWB OLECMDID_ONUNLOAD, OLECMDEXECOPT_DODEFAULT, 0, ret
    If ret = False Then
        Cancel = 1
    End If
End Sub
				

Status

Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel Microsoft-Produkten handelt.

Weitere Informationen

Schritte zum Reproduzieren dieses Verhaltens

  1. Öffnen Sie Visual Basic und erstellen Sie eine neue Standard EXE-Datei.
  2. Wählen Sie im Menü Projekt Komponenten mit Microsoft-Internetsteuerelemente in Ihrem Projekt.
  3. Platzieren Sie eine Kopie des WebBrowser-Steuerelements im Formular der Anwendung.
  4. Speichern Sie die folgende Datei auf Ihrer Festplatte als Test.htm:
    <html>
    
    <HEAD>
    <SCRIPT>
    function unload() {
    	alert("Inside unload");
    }
    function beforeunload() {
    	alert("Inside beforeunload");
    }
    </SCRIPT>
    </HEAD>
    
    <body onunload="unload();" onbeforeunload="beforeunload();">
    </body>
    
    </html>
    					
  5. Fügen Sie Code zu dieser Datei navigieren des Formulars Laden Funktion hinzu:
        WebBrowser1.Navigate "C:\temp\test.htm"
    					
  6. Führen Sie diese Anwendung aus der Visual Basic (IDE). Sobald die Seite vollständig geladen wird, schließen Sie das Formular. Sie erhalten eine Meldung "in"entladen, aber werden nie eine Meldung "in Beforeunload" angezeigt.

Informationsquellen

Finden Sie in der MSDN Library Informationen auf das onbeforeunload-Ereignis.

Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Internet Explorer 4.0 128-Bit Edition
  • Microsoft Internet Explorer 4.01 Service Pack 2
  • Microsoft Internet Explorer 4.01 Service Pack 1
  • Microsoft Internet Explorer 4.01 Service Pack 2
  • Microsoft Internet Explorer 5.0
  • Microsoft Internet Explorer 5.01
  • Microsoft Internet Explorer 5.5
Keywords: 
kbmt kbbug kbnofix kbwebbrowser KB253201 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: 253201  (http://support.microsoft.com/kb/253201/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.