Was ist der beste Weg, zu laden, einen string (HTML-code) im TWebBrowser?

Habe ich eine string-var 'HTMLCode' enthält HTML-code. Ich möchte zum laden von code in den browser ein.

Dies ist Embarcadero-code:

procedure THTMLEdit.EditText(CONST HTMLCode: string);
{VAR
   Doc: IHTMLDocument2;
   TempFile: string; }
begin
 TempFile := GetTempFile('.html');  
 StringToFile(TempFile, HTMLCode);
 wbBrowser.Navigate(TempFile);

 Doc := GetDocument;
 if Doc <> NIL
 then Doc.Body.SetAttribute('contentEditable', 'true', 0);  //crash here when I load complex html files

 DeleteFile(TempFile);
end;

Es hat einige Probleme so ersetzte ich es mit diesem hier:

procedure THTMLEdit.EditText(CONST HTMLCode: string);
VAR
   TSL: TStringList;
   MemStream: TMemoryStream;
begin
 wbBrowser.Navigate('about:blank');
 WHILE wbBrowser.ReadyState < READYSTATE_INTERACTIVE
  DO Application.ProcessMessages;

 GetDocument.DesignMode := 'On';

 if Assigned(wbBrowser.Document) then
  begin
    TSL := TStringList.Create;
    TRY
      MemStream := TMemoryStream.Create;
      TRY
        TSL.Text := HTMLCode;
        TSL.SaveToStream(MemStream);
        MemStream.Seek(0, 0);
        (wbBrowser.Document as IPersistStreamInit).Load(TStreamAdapter.Create(MemStream));
      FINALLY
        MemStream.Free;
      end;
    FINALLY
      TSL.Free;
    end;
  end;
end;

Aber dafür hat man auch Probleme . Erste, wenn ich links einfügen (...) in den HTML-code, den der browser den code ändern, Anhängen 'about:' vor meinen URLs. Zweitens: es ist langsamer als das erste Verfahren (mit temp-Datei).

Kann ich das laden von HTML-code im browser ohne Navigation zunächst auf 'about:blank'?

InformationsquelleAutor WeGoToMars | 2016-09-29
Schreibe einen Kommentar