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
相关产品推荐
相关产品推荐

