导航到google后,CDHtmlDialog在导航到pdf时崩溃
从www.google.com页面导航到pdf文件,导致CDHtmlDialog中出现异常。 从google以外的页面(如www.wikipedia.org)导航时不存在此异常 已重写“OnBeforeNavigate”、“OnNavigateComplete”和“OnDocumentComplete”事件。然后发现,在问题场景中,加载pdf文件时“OnNavigateComplete”被调用了两次。 调用顺序如下:OnBeforeNavigate=>OnNavigateComplete=>OnNavigateComplete 由于调用“OnNavigateComplete”时未调用“OnBeforeNavigate”,CDHtmlDialog中的“m_spHtmlDoc”不会变为NULL,并且验证会导致“CDHtmlDialog::OnNavigateComplete”中的断言。 断言(m_spHtmlDoc==NULL) 标题:导航到google后,CDHtmlDialog在导航到pdf时崩溃,html,visual-c++,mfc,Html,Visual C++,Mfc,从www.google.com页面导航到pdf文件,导致CDHtmlDialog中出现异常。 从google以外的页面(如www.wikipedia.org)导航时不存在此异常 已重写“OnBeforeNavigate”、“OnNavigateComplete”和“OnDocumentComplete”事件。然后发现,在问题场景中,加载pdf文件时“OnNavigateComplete”被调用了两次。 调用顺序如下:OnBeforeNavigate=>OnNavigateComplete=>On
class CClientAppDlg : public CDHtmlDialog
cpp:
尝试在Internet Explorer中打开该网站。可能存在与MFC无关的错误。感谢您的检查点。Internet Explorer中没有问题。PDF文件来自本地计算机本身。看起来您使用的是PDF插件,我们看不到。显示对话框的其余部分,以及对话框的创建方式。并说明Visual Studio的版本,这可能是相关的。您不需要将
UpdateData(TRUE)
放在其中,尽管这不会导致问题OnNavigateComplete
有时会被调用两次,我也不知道为什么,但它不会导致异常。我使用的是VS2017。我创建此应用程序是为了找出问题所在。创建MFC对话框应用程序,并将其基类从CDialogEx更改为CDHtmlDialog。要使用CDHtmlDialog,请包含“afxdhtml.h”文件。用CDHtmlDialog替换cpp文件中CDialogEx的用法。在CDHtmlDialog构造函数中,使用“0”作为第二个参数。这些都显示在代码段中。添加编辑控件以获取URL。“添加”按钮并单击“事件”导航到编辑控件中的URL。首先给出URL为“www.google.com”。然后是“E:\sample.pdf”。我认为IE使用AdobeReader作为插件。谢谢你的评论。
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);
}