WebBrowser.Document.Body ist immer null

8

Ich habe ein WebBrowser -Dokument gesetzt, um im Bearbeitungsmodus zu sein. Ich versuche, den inneren Text des Körperelements zu manipulieren, indem ich WebBrowser.Document.Body.InnerText verwende, WebBrowser.Document.Body bleibt jedoch null.

Hier ist der Code, wo ich den Inhalt des Dokuments erstellen:

%Vor%

Ich kann Code bearbeiten und alles in Ordnung, aber ich verstehe nicht, warum HtmlEditor.Document.Body Null bleibt. Ich weiß, ich könnte immer den Dokumentkörper immer zurücksetzen, wenn ich Text in das Formular laden muss, aber ich würde lieber verstehen, warum das so ist, wie es ist, wenn nichts anderes als das Wissen.

Jede Hilfe wird sehr geschätzt.

    
Bender the Greatest 15.11.2011, 18:13
quelle

4 Antworten

5

Sie müssen warten, bis das DocumentCompleted -Ereignis des Webbrowsers ausgelöst wird, damit DomDocument.Body nicht null ist. Ich habe das gerade getestet, um es zu verifizieren. Ich nehme an, die Frage bleibt immer noch: Wie können Sie über die zugrunde liegende COM-Schnittstelle bearbeiten, wenn das Dokument noch nicht vollständig geladen ist?

Ich habe überprüft, ob die Zeiger IHTMLDocument2 in DocumentCompleted und im Konstruktor identisch sind. Sie sind, die anzeigen können, dass das zugrundeliegende COM-Objekt ein einzelnes HTML-Dokumentobjekt wiederverwendet. Es sieht so aus, als hätten alle Änderungen, die Sie im Konstruktor vornehmen, eine ziemlich gute Chance, überschrieben zu werden oder eine Ausnahme auszulösen.

Wenn ich das zum Beispiel im Konstruktor mache, erhalte ich einen Fehler:

%Vor%

Wenn ich dasselbe in einem DocumentCompleted-Handler mache, funktioniert es gut.

Hoffe, das hilft. Danke.

    
Nathan Andrew Mullenax 20.07.2012 18:23
quelle
2

Verwenden Sie DocumentCompleted zuerst das Ereignis Wenn das WebBrowser-Steuerelement das Laden eines Dokuments beendet:

%Vor%

oder einfacher Weg:

%Vor%     
Ria 20.07.2012 19:54
quelle
0

Sie müssen die WebBrowser -Steuerung ein wenig arbeiten lassen, um der Eigenschaft Document.Body etwas Zeit zu geben.

Ich tue das, indem ich Application.DoEvents(); anrufe.

Zum Beispiel in Ihrem Code:

%Vor%     
remio 08.08.2012 08:10
quelle
0
%Vor%     
wertyk 23.08.2013 06:49
quelle