0

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*)&param);
        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”在加载的文档中?

4

1 回答 1

1

如果您在根目录下运行您的网站,它应该作为默认的“/”工作。

(我假设您知道在标记中设置基本 href 的位置,例如<base href="/" />

但是,如果发生了其他事情,您可以开始将基本 href 设置为绝对根,例如“ http://bar.com/

请注意,当我不得不修改这个时,在基本 href 中使用相对根是不可靠的;它可能是,但我想为什么要打扰。

当我从根目录加载站点时,我曾经必须为站点执行此操作(我只是将这些位复制到正在运行的网络服务器的子目录中,并且在我这样做之前遇到了图像问题)。实际上,我从根部又将其运行了一次,这迫使我这样做,而您没有这样做,在我看来,这很奇怪,它不起作用,但是再次尝试一下。

后来,我就这样做了(之前开始运行它自己的root的应用程序,允许我只使用“/”)。这使我可以使用相同的子目录根结构将其从 test 移动到 prod:

<script type="text/javascript">
document.write("<base href='http://" + document.location.host + "/' />");
</script>

当我不得不这样做时,两者都为我工作。

于 2017-04-19T19:12:30.000 回答