簡體   English   中英

如何為使用 IWebBrowser2 從內存加載的 HTML 文檔設置“基本 URL”?

[英]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*)&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”在加載的文檔中?

如果您從根目錄運行您的網站,它應該作為默認的“/”工作。

(我假設您知道在標記中設置 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM