【问题标题】:Can the host object events be received in the Javascript side?可以在 Javascript 端接收主机对象事件吗?
【发布时间】:2021-03-09 06:32:59
【问题描述】:

我使用 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));

我可以从脚本端调用方法/函数

我想在 c++ 端触发事件 _IHostObjectSample2Events::Event 并在 Javascript 端接收它

类似 window.chrome.webview.hostObjects.sample.addEventListener("Event", () => { do something });

【问题讨论】:

  • 这没有记录,我怀疑如果它被实现就不会是因为它是一个非常复杂的机制(IConnectionPoint,需要 COM 消息泵等)。只有微软可以回答这个问题(我看到这里已经发布了这个问题github.com/MicrosoftEdge/WebView2Feedback/issues/677
  • 它不适用于 IE 脚本,我预计连接点也不会使用 webview2 实现。
  • 您可以简单地从 C++ 调用:WebView2.ExecuteScriptAsync(String) 并调用普通的 javascript function
  • @RomanR。它与 IE 一起使用,这里的示例 codeproject.com/Articles/35532/… 像这样:
  • 那我就更正了。然而,IE11 也支持从 C++ 端提供回调接口的不同方法。我认为这就是 WebView2 的工作原理。不确定是否打算支持老化的连接点机制。

标签: javascript com atl webview2


【解决方案1】:

不幸的是,WebView2 的 AddHostObjectToScript 目前不直接支持事件。您可以将此作为功能请求提交到WebView2Feedback project

【讨论】:

    猜你喜欢
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多