У меня есть три функции ниже, чтобы получить и установить HTML, первая функция захватывает HTML DOM, вторая функция фиксирует исходную HTML-страницу, поскольку последняя функция вводит новый код в TWebBrowser, но делает то, что я хочу, и необходимость.Возможно переписать свойство документа и повторно загрузить HTML-страницу с помощью TWebBrowser?
После ввода нового кода выполняется успешно, но только визуально, когда я нажимаю правую кнопку и визуализирую исходный код, открывается блокнот, а вместо кода DOM я вижу код страницы.
Есть ли способ переписать исходный HTML?
Получить исходный код HTML (DOM).
function GetHTML(WebBrowser : TWebBrowser) : String;
var
HTMLElement : IHTMLElement;
begin
Result := '';
if Assigned(WebBrowser.Document) then begin
HTMLElement := (WebBrowser.Document as IHTMLDocument2).body;
if Assigned(HTMLElement) then begin
while HTMLElement.parentElement <> nil do begin
HTMLElement := HTMLElement.parentElement;
end;
Result := HTMLElement.outerHTML;
end else begin
Result := (WebBrowser.Document as IHTMLDocument2).all.toString;
end;
end;
end;
Получить исходный HTML-код («Оригинальный HTML»).
function GetWebBrowserHTML(Const WebBrowser : TWebBrowser) : String;
var
LStream : TStringStream;
Stream : IStream;
LPersistStreamInit : IPersistStreamInit;
begin
if not Assigned(WebBrowser.Document) then exit;
LStream := TStringStream.Create('');
try
LPersistStreamInit := WebBrowser.Document as IPersistStreamInit;
Stream := TStreamAdapter.Create(LStream, soReference);
LPersistStreamInit.Save(Stream, true);
Result := LStream.DataString;
finally LStream.Free();
end;
end;
Перепишите HTML-код исходного кода (только визуально).
procedure WBAppendHTML(WB : SHDocVw.TWebbrowser;const HTML : string);
var
Doc : MSHTML.IHTMLDocument2;
BodyElem : MSHTML.IHTMLBodyElement;
Range : MSHTML.IHTMLTxtRange;
begin
if not SysUtils.Supports(WB.Document, MSHTML.IHTMLDocument2, Doc) then begin
Exit;
end;
if not SysUtils.Supports(Doc.body, MSHTML.IHTMLBodyElement, BodyElem) then
begin
Exit;
end;
Range := BodyElem.createTextRange;
Range.collapse(False);
Range.pasteHTML(HTML);
end;