javascript - 如何在WebBrowser 控件window.external 方法中生成异常在MFC 中实现?

标签 javascript c++ mfc browser

我使用 WebBrowser 控件和 MFC HTML 对话框来构建可移植的 C++ 应用程序界面。我使用 window.external(实际上是我的对话框类)在浏览器中为 JavaScript 代码公开 C++ 功能。因此,例如,当用户想要保存设置时,他单击“保存”按钮,在这种情况下,我这样调用 window.external:

<script type="text/javascript">
$("#Save").click(function() {
try
{
   window.external.Save();
}
catch(error)
{
   alert(error);
});
</script>

现在,在 HTML 对话框中我有这样的方法:

void CMyDialog::Save()
{
   // Do something...
}

如果用户输入无效设置,在 CMyDialog::Save() 中生成异常以停止方法执行并显示任何错误消息看起来合乎逻辑。然而,这里的问题是C++异常必须由JavaScript处理,我不知道如何实现它。 所以:有没有办法在 C++ 代码中抛出异常,使 JavaScript 可以使用其 try-catch 语句处理异常? P. S. 我知道有一些方法可以避免这个问题,例如,可以从 Save 方法返回错误代码,而不是抛出异常并在成功时返回 0 等;然而,至少对我来说,异常是更舒适和直观的报告错误的方式,所以如果有人知道解决方案,请写下你的想法。

最佳答案

在 C++ 代码中,您通过返回显示失败的 HRESULT 值(负值)来指示错误。那些已经被转换为脚本异常(Error Object)。

如果想提供扩展信息,比如message,可以实现ISupportErrorInfo实现 IDispatch/IDispatchEx 接口(interface)的 C++ 类上的接口(interface),并返回错误信息,如 MSDN 上的本主题所述:Returning Error Information .

关于javascript - 如何在WebBrowser 控件window.external 方法中生成异常在MFC 中实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13858690/

相关文章:

javascript - 当我在 Internet Explorer 中执行打开的 xhhtprequest 时,权限被拒绝消息

c++ - Qt5 内存轮询

php - JS/php 每分钟添加一次

javascript - Ajax DELETE 查询返回意外对象

c++ - GetText() 内存泄漏

c++ - 如何将元素插入具有动态大小的 ublas 矩阵

C++:传递 "typedef"定义的类作为参数

c++ - 如何在另一个对话进程中加载​​对话exe作为子窗口

c++ - exe在同一目录下找不到文本文件

javascript - 编辑自定义 javascript 以隐藏导航菜单、wordpress