javascript - 可以在 Javascript 端接收主机对象事件吗?
问题描述
我使用 ATL C++ 创建了一个 Com 对象
interface IHostObjectSample2 : IDispatch
{
[propget, id(2), helpstring("Property.")] HRESULT Property([out, retval] BSTR* stringResult);
[propput, id(2), helpstring("Property.")] HRESULT Property([in] BSTR stringValue);
};
dispinterface _IHostObjectSample2Events
{
methods:
[id(1), helpstring("message")] void Event();
};
coclass HostObjectSample2
{
[default] interface IHostObjectSample2;
[default, source] dispinterface _IHostObjectSample2Events;
};
我使用 AddHostObjectToScript 将 Com 对象添加到脚本
m_Webview->AddHostObjectToScript(L"sample", &remoteObjectAsVariant));
我可以从脚本端调用方法/函数
我想_IHostObjectSample2Events::Event
在 c++ 端触发事件并在 Javascript 端接收它
就像是 window.chrome.webview.hostObjects.sample.addEventListener("Event", () => { do something });
解决方案
不幸的是,WebView2 的 AddHostObjectToScript 目前不直接支持事件。您可以将此作为功能请求提交到WebView2Feedback 项目中。
推荐阅读
- json - 如何使用正则表达式匹配文档的第一个左大括号
- react-native - 是否有任何来自 detox 的预定义标志,我可以知道 App 正在 detox 上运行?
- javascript - 为什么 JavaScript bind() 调用将函数的参数反转?
- html - 如何解决网站上显示的 HTML 评论
- javascript - 如何使用 Deck.gl 显示多个 PathLayer
- python - 函数和列表 - 如何使用函数关联两个列表?
- swift - 在深色主题手机上使用“浅色主题”地图
- xcode - 在新 Xcode 中为应用程序的切片版本生成多个 IPA 文件
- python - 选择两个特定列都为非空的行
- java - Java JPA双向ManyToOne映射不起作用