Вам нужно предварительно загрузить допустимую строку / поток шаблона HTML, включая BASE
тег, в котором вы задали желаемый путь (с завершающей косой чертой), например "file:///c:/MyProjects/"
.
И переключитесь в режим редактирования, где ваши изображения SRC
должны быть относительными, например "resources/R.PNG"
. Ваше окончательное извлечение HTML-атера должно быть body.innerHTML
или body.outerHTML
(что вам нужно). Вы даже можете взять весь источник документа (google it).
Оберните извлеченный источник с действительным HTML / Body БЕЗ BASE
тега и сохраните на диск в c:MyProjects
.
но код для IMG execCommand - полный путь!
Вы ничего не можете с этим поделать. это то, как DOM представляет HTML - это не обязательно исходный код HTML. это поведение несовместимо. и также зависит от того, как вы вставляете изображения (я не использую "file:///c:/MyProjects/"
и не имею свой собственный диалог и не вставляю свой собственный HTML-код). Вам нужно вручную заменить извлеченный источник Navigate()
пустой строкой. по крайней мере, так я это делаю.
Изменить: вам не нужно document.write(HTML)
использовать внешний файл. вы можете написать «шаблон» / «пустой» HTML через .const HTML_TEMPLATE = '<html><head><base href="file:///%s"></head><body style="font-family:Arial">%s</body></html>'; procedure TForm1.LoadHTML(HTMLCode: string); var Doc: Variant; HTML, Path: string; begin Path := 'D:Temp'; HTML := Format(HTML_TEMPLATE, [Path, HTMLCode]); WebBrowser1.Navigate('about:blank'); Doc := WebBrowser1.Document; Doc.Write(HTML); Doc.Close; Doc.DesignMode := 'On'; end; procedure TForm1.Button1Click(Sender: TObject); begin LoadHTML('<b>Hello</b><img SRC="resources/1.png">'); end; procedure TForm1.Button2Click(Sender: TObject); var Doc: IHTMLDocument2; begin Doc := WebBrowser1.Document as IHTMLDocument2; if Assigned(Doc) then begin ShowMessage(Doc.body.innerHTML); end; end;
Попробуй это:
<B>Hello</B><IMG src="resources/1.png">
Выход для меня: src
. в некоторых случаях src
может содержать полный путь. Я не могу на 100% быть уверенным, когда это произойдет. но вы должны быть готовы справиться с этой ситуацией, заменив путь вручную. нет убедительной документации по этому поводу, поэтому я всегда решаю эту проблему в любом случае.