使用 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 从中接收到的字符串触发文本框网站。
希望这对那里的一些人有帮助,因为例子似乎很少。
我有一个使用 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 从中接收到的字符串触发文本框网站。
希望这对那里的一些人有帮助,因为例子似乎很少。