gpt4 book ai didi

javascript - 在 C++ 代码中处理 HTML 按钮单击事件

转载 作者:行者123 更新时间:2023-11-28 07:57:06 24 4
gpt4 key购买 nike

我有一个 Windows native C++/Win32/MFC 对话框应用程序。我在对话框中使用 IE ActiveX 控件来呈现一些 HTML 内容。呈现的 HTML 包含一个按钮。该按钮有一个 onClick javascript 处理程序,如下所示。

<input type="button" id="uniqueButtonID" name="uniqueButtonName" value="blue" onClick="OnButtonClick('blue');">

目前,按钮点击由显示的 javascript 处理程序在页面中处理。这一切都有效。

相反,我想在对话框 C++ 代码中处理按钮单击。

我有一些处理对话框中其他事件的经验。例如,下面的工作并允许处理文档完成事件和导航。

BEGIN_EVENTSINK_MAP(DMyDlg, CDialog)
ON_EVENT(DMyDlg, IDC_EXPLORER2, 259, DMyDlg::DocumentCompleteExplorer2, VTS_DISPATCH VTS_PVARIANT)
ON_EVENT(DMyDlg, IDC_EXPLORER2, 250, DMyDlg::BeforeNavigate2, VTS_DISPATCH VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PBOOL)
END_EVENTSINK_MAP()

不过,这些是预定义的众所周知的事件。不确定如何将其转化为处理我在 onClick=""部分的按钮中定义的内容。

有人知道怎么做吗?这里的动机是我在另一个定义了一些业务逻辑的 C++ 应用程序中使用了一些代码。我想要在这里使用相同的业务逻辑。目前我每次都必须将其翻译成 Javascript。如果我可以在 C++ 代码中处理事件,我可以只复制/粘贴(或通过 DLL 重新使用)并避免 Javascript 翻译阶段。

最佳答案

您需要创建一个 COM 对象作为 JavaScript 和 C++ 之间的桥梁。 JavaScript 初始化代码类似于:

var myhelper = new ActiveXObject("MyCompany.MyHelper");

请注意,尽管名称为“ActiveXObject”,但该对象不必是完整的 ActiveX 控件,只需是一个 COM 对象即可。然后在您的 onClick 处理程序中,您可以执行以下操作:

myhelper.DoThis();
myhelper.DoThat();

“有趣”的部分是在 C++ 中创建 COM 对象 - IDL 文件、ATL 类、IDispatch、IUnknown 以及所有我试图忘记的东西。

但有一件事 - 如果 C++ 代码存在于您的应用程序 exe 中(而不是在单独的 COM DLL 中),请不要忘记,当您的程序启动时,您必须为“MyCompany.MyHelper”创建一个类工厂实例,并且将其注册到 COM,以便 JavaScript 中的“new ActiveXObject”成功。

[更新 1]

我应该在最初的回复中添加 - 如果可以避免,我实际上不建议这样做。在C#和.NET出现之前,我们公司其实觉得COM是个好东西,值得花时间和精力去学习。今天……没那么多。

在您的情况下,在 C++ 和 JavaScript 中使用您的业务逻辑可能看起来像是很多额外的工作 - 但至少这是您可以计划、分配资源并希望能够完成的额外工作.一旦你沿着 C++/COM/ActiveScripting 的道路走下去,当东西停止工作时——你可能会花很多时间来尝试追查模糊的 COM 相关问题。无论如何,祝你好运!

关于javascript - 在 C++ 代码中处理 HTML 按钮单击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12463113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com