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

时间:2018-04-16 20:40:35

标签: .net vb.net cefsharp

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

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

现在我正在进一步发展:

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

此刻我正特意看到鼠标移动时捕捉鼠标事件和(如果可能的话)。

我已经在网上找到了2-3个相关的引用,这里是C#中的Stackoverflow(包括CEFSharp FAQ中的例子),但我不完全确定如何将它移植到VB.NET。请参阅此处提到的示例:

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

在Stackoverflow上:How to trap/listen javascript function or events in cefsharp

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

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

1 个答案:

答案 0 :(得分:1)

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

以下是我使用Visual Studio 2017所做的工作。

首先我创建了BoundObject类并将其添加到我已经使用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从网站收到的字符串激活文本框。

希望这可以帮助一些人,因为似乎很少有例子。