Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用VB.NET在CEFSharp中捕获Javascript鼠标事件_.net_Vb.net_Cefsharp - Fatal编程技术网

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

用VB.NET在CEFSharp中捕获Javascript鼠标事件,.net,vb.net,cefsharp,.net,Vb.net,Cefsharp,我有一个使用CEFSharp的VB.NET Winforms应用程序,我对它非常满意 目前,我能够将JS代码注入目标站点,例如在站点上触发函数或设置文本框值等。 同时,我还设法从目标网站上的文本框控件读取值 现在,我正在努力进一步发展: 我还希望能够在显示的网站上的javascript事件中使用我的代码做出反应。 e、 当网站上触发特定的javascript事件时,我可以在代码中调用vb.net函数 目前,我正在特别关注鼠标移动事件,如果可能的话,还将关注鼠标滚轮移动时的情况 我已经在web上和

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

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

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

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

目前,我正在特别关注鼠标移动事件,如果可能的话,还将关注鼠标滚轮移动时的情况

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

这里是Stackoverflow:

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

有人能给我指一下正确的方向吗?
提前感谢您的帮助。

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

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

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

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中从网站接收到的字符串启动textbox

希望这能帮助一些人,因为似乎只有很少的例子