我正在使用IHTMLDocument2::write()
描述here,以便将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)。但是,由于没有&#34;基本URL&#34;从中加载它们。
如何设置文档的基本URL,以便在&#34; http://bar.com/baz/foo.png&#34;中有图像foo.png时,可以通过&#href找到图像34;巴兹/ foo.png&#34;在加载的文档中?
答案 0 :(得分:1)
如果您从根网站运行网站,它应该作为默认设置&#34; /&#34;。
(我假设您知道在标记中设置基本href的位置,例如<base href="/" />
)
但是,如果还有其他事情发生,你可以开始将基础href设置为绝对根,例如&#34; http://bar.com/&#34;
请注意,当我不得不修补它时,在基础href中使用相对根是不可靠的;它可能是,但我想为什么要这么麻烦。
当我从根目录下载一个网站时,我曾经必须这样做(我只是将这些位复制到正在运行的网络服务器的子目录中,并且在我刚刚执行此操作之前出现问题) 。我实际上是从根本上再跑了一次,这是迫使我这样做的,而你并没有这样做,这在我看来很奇怪,它不起作用,但同样,它是&#39有点值得尝试。
后来,我这样做了(在开始运行自己的root应用程序之前,允许我只使用&#34; /&#34;)。这允许我将它从测试移动到具有相同子目录根结构的prod:
<script type="text/javascript">
document.write("<base href='http://" + document.location.host + "/' />");
</script>
当我不得不这样做时,两个都对我有用。