首页 > 解决方案 > CWebBrowser2 (MFC) GoBack 方法在没有任何内容可返回时导致崩溃

问题描述

我的应用程序支持 IE (InternetExplorer) 浏览器。当单击后退/前进按钮并且没有任何内容可返回或前进时,Webbrowser.GoBack()Webbrowser.GoForward()导致崩溃。

有什么办法可以在我真正打电话之前知道我是否可以回去GoBack()?我查看了CWebBrowser2类函数,但找不到任何类似的东西。

是否有任何 API 可以帮助解决这个问题,或者有任何替代方法来处理这个问题?

标签: c++internet-explorermfciwebbrowser2

解决方案


有什么办法可以在我真正打电话之前知道我是否可以回去GoBack()

根据IWebBrowser2::GoBack()文档:

使用该DWebBrowserEvents2::CommandStateChange事件检查向后导航的启用状态。如果事件的CSC_NAVIGATEBACK命令被禁用,则已到达历史列表的开头,IWebBrowser2::GoBack不应使用该方法。

同样在IWebBrowser2::GoForward文档中:

使用该DWebBrowserEvents2::CommandStateChange事件检查前向导航的启用状态。如果事件的CSC_NAVIGATEFORWARD命令被禁用,则已经到达历史列表的末尾,并且IWebBrowser2::GoForward不应使用该方法。

根据这个讨论线程

BOOL在处理“后退”和“前进”工具栏按钮通知的类中 创建几个成员变量ON_UPDATE_COMMAND_UI——每个按钮状态一个。将它们都初始化FALSE为ctor。处理OnCommandStateChange事件,并注意“nCommand”参数中的 CSC_NAVIGATEBACKCSC_NAVIGATEFORWARD值。当您获得CSC_NAVIGATEBACK值时,将“启用”参数值存储到BOOL“后退”按钮状态的成员变量中。当您获得CSC_NAVIGATEFORWARD价值时,对“前进”按钮状态变量执行相同的操作。在您的OnUpdateButtonForwardOnUpdateButtonBack处理程序中,pCmdUI->Enable使用相应的按钮状态成员变量进行调用。

因此,使用浏览器的CSC_NAVIGATE...状态变化来了解何时调用GoBack()/GoForward() 是安全的。这些是 IE 用来启用/禁用其自己的后退/前进 UI 工具栏按钮的相同事件。


推荐阅读