c++ - CWebBrowser2 (MFC) GoBack 方法在没有任何内容可返回时导致崩溃
问题描述
我的应用程序支持 IE (InternetExplorer) 浏览器。当单击后退/前进按钮并且没有任何内容可返回或前进时,Webbrowser.GoBack()
并Webbrowser.GoForward()
导致崩溃。
有什么办法可以在我真正打电话之前知道我是否可以回去GoBack()
?我查看了CWebBrowser2
类函数,但找不到任何类似的东西。
是否有任何 API 可以帮助解决这个问题,或者有任何替代方法来处理这个问题?
解决方案
有什么办法可以在我真正打电话之前知道我是否可以回去
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_NAVIGATEBACK
和CSC_NAVIGATEFORWARD
值。当您获得CSC_NAVIGATEBACK
值时,将“启用”参数值存储到BOOL
“后退”按钮状态的成员变量中。当您获得CSC_NAVIGATEFORWARD
价值时,对“前进”按钮状态变量执行相同的操作。在您的OnUpdateButtonForward
和OnUpdateButtonBack
处理程序中,pCmdUI->Enable
使用相应的按钮状态成员变量进行调用。
因此,使用浏览器的CSC_NAVIGATE...
状态变化来了解何时调用GoBack()/
GoForward() 是安全的。这些是 IE 用来启用/禁用其自己的后退/前进 UI 工具栏按钮的相同事件。
推荐阅读
- serialization - Weka 随机森林模型文件太大
- swift - 通用视图生成器无法快速推断类型
- powerbi - Power BI 中的动态文本 - 支持文本的措施
- ansible - NXOS Ansible“连接失败:超时”
- html - 我无法让网页上的文字和其他内容出现在徽标图片的右侧
- c# - 程序试图加载 cs.html 文件,给出 404
- reactjs - Reactjs+Flow:SyntheticKeyboardEvent 并将函数作为道具传递
- java - 使用真实手机时无法获取我的当前位置
- javascript - 为什么我删除静音后自动播放停止工作?
- javascript - 悬停时可以将元素带到另一个兄弟元素吗?[CSS动画]