【发布时间】:2018-03-16 11:02:34
【问题描述】:
我正在创建一个 WinForm 应用程序,其中包含一个嵌入式浏览器,它借助 Leaflet 框架显示 OSM 地图。在 WinForm 端有图表,必须根据用户在 OSM 地图上选择的标记进行更新。只要我在 Visual Studio 中使用原生浏览器,浏览器和 winform 的交互就运行良好。但由于 IE 中大量标记的渲染效果不佳,我不得不在 Cefsharp 的帮助下切换到 Chromium。
我使用的 Cefsharp 版本是 3.3239.1723.g071d1c1。部署浏览器没有任何问题(ChrisKent 教程帮助很大 - link)。
我面临的主要问题是如何在 Cefsharp/Chromium 浏览器中从 JS 调用 Winform 过程。
在 VS 中使用本机浏览器控件时,这可以很容易地完成,但我想在 Cefsharp 中方法完全不同。我在网上阅读文档和一些可用的问题,但我找不到我的答案。可能我需要根据文档向 JavaScript 公开一个 .NET 类。老实说,我不明白该怎么做。最重要的是,我正在使用 Visual Basic。
任何帮助将不胜感激。下面我可以非常简化地展示我需要的东西。 JavaScript onClick 事件应该触发 WinForms HelloWorld() 过程的执行。
//JavaScript side
<script>
function onClick(e) {
//How to Call Winform sub HelloWorld?
//with native browser this is done with "window.external.HelloWorld();"
};
WinForm 如下所示:
Imports CefSharp.WinForms
Imports CefSharp
Public Class Form1
Private WithEvents browser As ChromiumWebBrowser
Public Sub New()
InitializeComponent()
Dim settings As New CefSettings()
CefSharp.Cef.Initialize(settings)
browser = New ChromiumWebBrowser("http://localhost") With {
.Dock = DockStyle.Fill
}
panBrowser.Controls.Add(browser)
End Sub
Private Sub HelloWorld()
MsgBox("Hello World")
End Sub
End Class
提前谢谢你!
【问题讨论】:
-
github.com/cefsharp/CefSharp/wiki/… 和 github.com/cefsharp/CefSharp/issues/2246 文档将很快更新,在此之前您必须将其拼凑起来。 VB.Net中没有官方的例子。
-
感谢@amaitland 指出有一种新的绑定方法。我做了一些研究,发现了如何实现我所需要的。我会将其发布为对我的问题的自我回答。 Cefsharp 项目真的很棒 :) 并为你对它的贡献欢呼!
标签: javascript winforms chromium cefsharp