[英]How to set the "base URL" for a HTML document loaded from memory using IWebBrowser2?
我使用IHTMLDocument2::write()
描述在這里以裝載HTML從內存到IWebBrowser2
實例。 代碼如下所示:
#include <MsHTML.h>
void CMyDlg::WriteHTML(const wchar_t* html)
{
IDispatch* pHtmlDoc = m_explorer.get_Document();
if (!pHtmlDoc)
return;
CComPtr<IHTMLDocument2> doc2;
doc2.Attach((IHTMLDocument2*)pHtmlDoc);
if (!doc2)
return;
SAFEARRAY* psaStrings = SafeArrayCreateVector(VT_VARIANT, 0, 1);
if (!psaStrings)
return;
BSTR bstr = SysAllocString(html);
if (bstr)
{
VARIANT* param;
HRESULT hr = SafeArrayAccessData(psaStrings, (LPVOID*)¶m);
if (SUCCEEDED(hr))
{
param->vt = VT_BSTR;
param->bstrVal = bstr;
hr = SafeArrayUnaccessData(psaStrings);
if (SUCCEEDED(hr))
{
doc2->write(psaStrings);
doc2->close();
}
}
}
if (psaStrings)
SafeArrayDestroy(psaStrings);
}
這如我所料(加載了 HTML)。 但是,找不到任何鏈接的資源(圖像等),因為沒有可從中加載它們的“基本 URL”。
如何設置文檔的基本 URL,以便如果“http://bar.com/baz/foo.png”上有圖像 foo.png,則可以通過“baz/foo”的 href 找到該圖像.png”在加載的文檔中?
如果您從根目錄運行您的網站,它應該作為默認的“/”工作。
(我假設您知道在標記中設置 base href 的位置,例如<base href="/" />
)
但是,如果發生其他事情,您可以開始將 base href 設置為絕對根,例如“ http://bar.com/ ”
請注意,當我不得不修補這個時,在基本 href 中使用相對根從來都不可靠; 它可能是,但我想為什么要麻煩。
當我從根目錄加載一個站點時,我曾經不得不為它做這件事(我只是將這些位復制到正在運行的網絡服務器的子目錄中,並且在我這樣做之前圖像有問題)。 實際上,我從根上又運行了一個,這就是迫使我這樣做的原因,而您沒有這樣做,這在我看來很奇怪,它不起作用,但同樣,這是嘗試的方法。
后來,我這樣做了(之前開始運行自己的根應用程序,允許我只使用“/”)。 這允許我使用相同的子目錄根結構將它從測試移動到生產:
<script type="text/javascript">
document.write("<base href='http://" + document.location.host + "/' />");
</script>
當我不得不這樣做時,兩者都為我工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.