繁体   English   中英

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

[英]Catch Javascript mouse event in CEFSharp with VB.NET

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

目前,我能够将JS代码注入到目标站点中,例如在该站点上触发函数或设置文本框值等。同时,我还设法从目标站点上的文本框控件中读取值。

现在,我正在为进一步的发展而努力:

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

此刻,我特别想捕捉mouseup事件,以及(如果可能)赶上鼠标滚轮。

我已经在Web上和C#中的Stackoverflow上找到了2-3个相关参考(包括CEFSharp FAQ中的示例),但是我不确定如何将其移植到VB.NET。 请参阅此处提到的示例:

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

在此处的Stackoverflow上: 如何在cefsharp中捕获/监听javascript函数或事件

因此原则上应该有可能,但是我只是迷失在VB.NET翻译中。

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

我是在另一个论坛的一些专家的帮助下,将官方的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中从网站接收的字符串触发文本框。

希望这对外面的人有帮助,因为似乎很少有例子。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM