You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WebView2调用window.external.sendBack函数失败求助

WebView2无法调用window.external.sendBack的解决方法

WebView2和WebBrowser的JS与宿主交互机制不同,你之前用WebBrowser的方式在WebView2里不生效,需要按以下步骤修改:

  • 第一步:创建COM可见的宿主类,包含要被JS调用的方法
    必须给类加上<ComVisible(True)>属性,确保WebView2能识别到:

    <ComVisible(True)>
    Public Class WebView2Host
        Public Sub sendBack(arg As String)
            ' 在这里处理网页回传的字符串,比如打印或存储
            Console.WriteLine("收到回传内容:" & arg)
        End Sub
    End Class
    
  • 第二步:在WebView2初始化完成后注册宿主对象
    要等到CoreWebView2初始化完成后,再把宿主对象绑定到JS的window.external上:

    Private Sub wWebView_CoreWebView2InitializationCompleted(sender As Object, e As CoreWebView2InitializationCompletedEventArgs) Handles wWebView.CoreWebView2InitializationCompleted
        If e.IsSuccess Then
            ' 将宿主对象注册为JS中的window.external
            wWebView.CoreWebView2.AddHostObjectToScript("external", New WebView2Host())
        End If
    End Sub
    
  • 第三步:保留原JS代码(确保在宿主注册后执行)
    你之前在NavigationCompleted事件里的JS代码可以继续使用,因为此时宿主对象已经注册完成,JS能找到window.external.sendBack方法。

问题原因

WebBrowser通过ObjectForScripting属性直接关联窗体的公共方法,但WebView2要求必须显式注册COM可见的宿主对象,否则JS无法识别window.external下的自定义方法,这就是你报错window.external.sendBack is not a function的根本原因。

内容的提问来源于stack exchange,提问作者dcme

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 21:33:12