2014-01-14 4 views
1

У меня есть три функции ниже, чтобы получить и установить 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; 

ответ

1

Единственный способ я знаю, чтобы загрузить HTML с веб-сервера себя и изменить его по мере необходимости (которая включает в себя вставки <base href> тег в <head> так относительные ссылки могут быть разрешены), а затем загрузите измененный HTML в TWebBrowser через его метод IPersisteStreamInit.load() (если нет загруженного Document, сначала перейдите по адресу TWebBrowser к URL-адресу "about:blank").

 Смежные вопросы

  • Нет связанных вопросов^_^