【问题标题】:Catch Javascript mouse event in CEFSharp with VB.NET使用 VB.NET 在 CEFSharp 中捕获 Javascript 鼠标事件
【发布时间】:2018-04-16 20:40:35
【问题描述】:

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

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

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

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

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

我已经在网络上找到了 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 翻译中。

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

【问题讨论】:

    标签: .net vb.net cefsharp


    【解决方案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 中的字符串触发文本框。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-26
      • 2016-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多