Переход со страницы www.google.com в файл PDF приводит к исключению в CDHtmlDialog. Это исключение отсутствует при переходе от страниц, отличных от Google (например, www.wikipedia.org).
Переопределяет события OnBeforeNavigate, OnNavigateComplete и OnDocumentComplete. Затем обнаружил, что в сценарии проблемы при загрузке pdf-файла «OnNavigateComplete» вызывается дважды. Последовательность вызова выглядит следующим образом: OnBeforeNavigate => OnNavigateComplete => OnNavigateComplete
Поскольку «OnNavigateComplete» вызывается без вызова «OnBeforeNavigate», «m_spHtmlDoc» в CDHtmlDialog не вызывается, так как «mNspigtocDialog» не вызывает NULL и не становится NULLOnNavigateComplete». ASSERT (m_spHtmlDoc == NULL);
Заголовок:
class CClientAppDlg : public CDHtmlDialog
cpp:
CClientAppDlg::CClientAppDlg(CWnd* pParent /*=nullptr*/)
: CDHtmlDialog(IDD_CLIENTAPP_DIALOG, 0, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CClientAppDlg::OnBnClickedNavigate()
{
UpdateData(TRUE);
Navigate(m_csNavURL); // Get URL from edit box and navigate
UpdateData (FALSE);
}
void CClientAppDlg::OnBeforeNavigate( LPDISPATCH pDisp, LPCTSTR szUrl)
{
CDHtmlDialog::OnBeforeNavigate(pDisp, szUrl);
}
void CClientAppDlg::OnNavigateComplete( LPDISPATCH pDisp, LPCTSTR szUrl)
{
CDHtmlDialog::OnNavigateComplete(pDisp, szUrl);
}
void CClientAppDlg::OnDocumentComplete(LPDISPATCH pDisp, LPCTSTR szUrl)
{
CDHtmlDialog::OnDocumentComplete(pDisp, szUrl);
}
- Почему "OnNavigateComplete" вызывается дважды и вызывает исключение?
- Почему это происходит только при переходе со страницы Google?