私はDesignMode(Doc.DesignMode:= 'On')でTWebBrowserを使用してHTMLドキュメントを作成しています。 TWebBrowserにロードされているドキュメント(ディスク上のHTMLファイル)はありません。私はTWebBrowserで直接ゼロからドキュメントを作成します。 HTMLコードはTWebBrowserから抽出され、c:/MyProjects/SomeHtmlName.htmlとして保存されます。TWebBrowserで相対パス画像を表示する方法は?
問題は、相対パスがある場合、挿入する画像が表示されないことです。
<IMG src="file:///c:/MyProjects/resources/R.PNG">
しかし、私が入力したとします:
<IMG border=0 src="resources\R.PNG">
<IMG border=0 src="resources/R.PNG"> <---- preferred so it will work on Linux
ではなくのイメージプレースホルダーが表示されます、私はWebブラウザーでこのコードを貼り付ける場合、正確に、それは瞬時に画像が表示されます
詳細実際の画像
ルートパスが変更された場合や、FTPでアップロードした場合でもウェブサイトが動作するように、相対パスが必要です。
procedure TForm1.Button1Click(Sender: TObject);
begin
LoadDummyPage;
SetHtmlCode('<img src="resources/test_img.PNG">');
Memo1.Text:= GetHtmlCode;
end;
function TForm1.LoadDummyPage: Boolean;
const FileName: string= 'c:\MyProject\_ONLINE WEB SITE\dummy.html';
begin
if not Assigned(wbBrowser.Document)
then wbBrowser.Navigate('about:blank');
Result := FileExists(FileName);
if Result
then wbBrowser.Navigate('file://' + FileName)
else Caption:= 'file not found';
end;
procedure TForm1.SetHtmlCode(const HTMLCode: string);
var
Doc: Variant;
begin
if not Assigned(wbBrowser.Document)
then wbBrowser.Navigate('about:blank');
Doc := wbBrowser.Document;
Doc.Write(HTMLCode);
Doc.Close;
Doc.DesignMode := 'On';
WHILE wbBrowser.ReadyState < READYSTATE_INTERACTIVE
DO Application.ProcessMessages;
Doc.body.style.fontFamily := 'Arial';
Doc.Close;
end;
function TForm1.GetHtmlCode: string; { Get the HTML code from the browser }
var
Doc: IHTMLDocument2;
BodyElement: IHTMLElement;
begin
if Assigned(wbBrowser.Document) and (wbBrowser.Document.QueryInterface(IHTMLDocument2, Doc) = S_OK) then
begin
BodyElement := Doc.body;
if Assigned(BodyElement) then
Result := BodyElement.innerHTML;
end;
if Result > ''
then Result := StringReplace(Result, '="about:', '="', [rfReplaceAll, rfIgnoreCase]); { Fix the 'How stop TWebBrowser from adding 'file:///' in front of my links' bug }
end;
実行可能ファイルの現在の作業ディレクトリがc:/ MyProjects /の場合は機能しますか? – mjn42
私が使用できる 'ハック'は、HTMLを後処理して 'file:/// c:/ MyProjects /' – Ampere
@ mjn42 --nopeを削除することです。おそらく画像が 'Resources'フォルダにあるからでしょうか?さらに、私はTWebBrowserの 'root'フォルダはInternet Explorerのデフォルトのルートフォルダ(これが何であっても)で、アプリケーションのフォルダではないと思う。 – Ampere