使用 VB.NET 在 CEFSharp 中捕获 Javascript 鼠标事件

Catch Javascript mouse event in CEFSharp with VB.NET

我有一个使用 CEFSharp 的 VB.NET Winforms 应用程序,我真的非常非常满意。

目前我可以将 JS 代码注入目标站点,例如触发功能或设置文本框值,在网站上等。 与此同时,我还设法从例如目标网站上的文本框控件。

现在我正在为进一步的发展而苦苦挣扎:

我还希望能够在显示的网站上的 javascript 事件中使用我的代码做出反应。 (例如,当网站上触发特定 javascript 事件时,我可以在我的代码中调用 vb.net 函数)

目前我正在特别寻找捕捉 mouseup 事件和(如果可能的话)移动鼠标滚轮时的事件。

我已经在网络上和此处的 C# 中的 Whosebug 上找到了 2-3 个相关参考资料(包括 CEFSharp 常见问题解答中的示例),但我不完全确定如何将其移植到 VB.NET。请参阅此处提到的示例:

https://github.com/cefsharp/CefSharp/wiki/Frequently-asked-questions#JSEvent

在 Whosebug 上:

所以原则上应该可以,但我只是迷失在VB.NET翻译中。

有人能给我指出正确的方向吗? 预先感谢您的帮助。

在另一个论坛上一些专家的帮助下,我能够将官方 CEFSharp 示例移植到 VB.NET....

这是我使用 Visual Studio 2017 所做的。

首先,我创建了 BoundObject class 并将其添加到我已经在使用 CEFSharp 的程序中:

Imports CefSharp.WinForms
Imports CefSharp

Public Class BoundObject
    Friend browser As ChromiumWebBrowser

    Public Sub browser_FrameLoadEnd(sender As Object, e As FrameLoadEndEventArgs)
        If e.Frame.IsMain Then
            browser.ExecuteScriptAsync("document.body.onmouseup = Function()
          {
            bound.onSelected(window.getSelection().toString());
          }
        "");")
        End If
    End Sub

    Public Sub OnSelected(ByVal selected As String)
        MessageBox.Show("The user selected some text [" & selected & "]")
    End Sub
End Class

然后我将以下代码添加到我的 Public Sub New() 函数的末尾:

    CefSharpSettings.LegacyJavascriptBindingEnabled = True
    Dim obj As New BoundObject()
    obj.browser = browser
    browser.RegisterJsObject("bound", obj)
    AddHandler browser.FrameLoadEnd, AddressOf obj.browser_FrameLoadEnd

第一行是必要的,因为我使用的是 CEFSharp 的 V63,从这个版本开始有一种处理绑定函数的新方法,但是通过启用旧的绑定方法仍然可以使用旧方法。

我还必须更改事件名称,因为该 C# 示例中的原始事件名称似乎在较新版本的 CEFSharp 中已重命名。

我用 Devtools 控制台测试了这段代码,我可以调用 bound.onSelected 函数并将一个字符串从 JS 传递到我的 vb.net 应用程序,并使用 JS 从中接收到的字符串触发文本框网站。

希望这对那里的一些人有帮助,因为例子似乎很少。