从CDHtmlDialog获取cookie

时间:2017-02-24 11:38:30

标签: c++ mfc

在我的MFC应用程序中,我有一个派生的CDHtmlDialog类,它打开一个登录屏幕,我需要在重定向后从服务器获取一个URL和一个cookie。

我导航到OnInitDialog中的url并捕获OnNavigateComplete中的重定向:

void CDMYHtmlDlg::OnNavigateComplete(LPDISPATCH pDisp, LPCTSTR szUrl)
{
    BSTR *bstr = nullptr;
    this->GetDHtmlDocument(&this->m_spHtmlDoc);
    if (this->m_spHtmlDoc != nullptr)
        this->m_spHtmlDoc->get_cookie(bstr);
}

但GetDHtmlDocument正在返回E_NOINTERFACE,我应该实现吗?如果是,我如何获得IHTMLDocument2?。

所以我的问题是为什么我无法获取文件,这是获取cookie的正确方法吗?

提前感谢,抱歉我的英语不好。

1 个答案:

答案 0 :(得分:0)

终于明白了。

在CDHtmlDialog类中,OnNavigateComplete方法负责为m_spHtmlDoc赋值,但由于我覆盖了方法,因此没有为文档赋值,甚至OnDocumentComplete都没有,所以简单的解决方案是

void CDHtmlDlgPersonalizado::OnNavigateComplete(LPDISPATCH pDisp, LPCTSTR szUrl)
{
    /*CALL THE PARENT METHOD*/
    CDHtmlDialog::OnNavigateComplete(pDisp, szUrl);

    /*Now GetDHtmlDocument will get the value from m_spHtmlDoc and assign to spHtmlDoc*/
    IHTMLDocument2Ptr spHtmlDoc = nullptr;
    this->GetDHtmlDocument(&spHtmlDoc);

    if (spHtmlDoc != nullptr)
    {
        BSTR bstr = ::SysAllocString(L" ");
        spHtmlDoc->get_cookie(&bstr);
    }
}