【问题标题】:Microsoft .Net Win Form Webview2 interopMicrosoft .Net Win Form Webview2 互操作
【发布时间】:2021-12-27 12:56:05
【问题描述】:

我正在尝试与 webview2 中加载的页面进行互操作。基本上我想做的是从 webview 调用一个 win 表单方法,但是方法 showMessageFromWebview2 永远不会被触发。

网页内容是从 localhost 加载的。

任何帮助将不胜感激。

win形式的代码

 async private void WebView_CoreWebView2Ready(object sender, EventArgs e)
        {
            testBrowser.CoreWebView2.WebMessageReceived += showMessageFromWebview2; 
        }

public void showMessageFromWebview2(Object sender, CoreWebView2WebMessageReceivedEventArgs args)
        {
            String msg = args.TryGetWebMessageAsString();
            MessageBox.Show(msg);
        }

Javascript 代码

window.chrome.webview.postMessage(mJsonObject);

【问题讨论】:

  • 应该被触发,检查 IsWebMessageEnabled 是否为真 docs.microsoft.com/en-us/dotnet/api/…
  • 还要检查你的 mJsonObject,它是什么?
  • @demonplus 它只是一个包含“消息”的对象:“你好”。但即使我将一个字符串作为参数,win forms 方法也不会被触发。
  • @demonplus 我已经在 webview2 准备好时设置好了:testBrowser.CoreWebView2.Settings.IsWebMessageEnabled = true;

标签: c# .net winforms webview2 winforms-interop


【解决方案1】:

我终于明白了!谢谢@demonplus!

我刚刚将 CoreWebView2.SettingsWebMessageReceived 事件处理程序移至 EnsureCoreWebView2Async 方法之后的初始化块: p>

async private void InitializeAsync()
{
    await testBrowser.EnsureCoreWebView2Async(); // Wait for coreWebView2 initialization
    testBrowser.CoreWebView2.Settings.IsWebMessageEnabled = true;
    testBrowser.CoreWebView2.WebMessageReceived += showMessageFromWebview2;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 2013-06-09
    相关资源
    最近更新 更多