我有一个使用VB.NET的CEFSharp Winforms应用程序,我对它非常满意。
目前,我能够将JS代码注入目标站点,例如触发函数或设置textbox值、站点等。同时,我还设法从目标网站上的textbox控件读取值。
现在我正在为进一步的发展而奋斗:
我也希望能够反应我的代码在一个javascript事件上显示的网站。(例如,当在网站上触发特定的javascript事件时,我可以在代码中调用vb.net函数)
目前,我正特别寻找捕捉鼠标事件,如果可能的话,也是当鼠标轮被移动。
我已经在C#中的中找到了2-3个相关的引用(包括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翻译中。
有人能给我指明正确的方向吗?提前谢谢你的帮助。
发布于 2018-04-22 14:51:07
我有幸在另一个论坛上的一些专家的帮助下,将官方的CEFSharp示例移植到了VB.NET .
下面是我使用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然后,我将以下代码添加到公共Sub New()函数的末尾:
CefSharpSettings.LegacyJavascriptBindingEnabled = True
Dim obj As New BoundObject()
obj.browser = browser
browser.RegisterJsObject("bound", obj)
AddHandler browser.FrameLoadEnd, AddressOf obj.browser_FrameLoadEnd第一行是必要的,因为我使用的是V63 of CEFSharp,从这个版本开始,有一种处理绑定函数的新方法,但是通过启用遗留绑定方法,旧方法仍然是可用的。
此外,我还必须更改事件名称,因为该C#示例中的原始事件名称似乎是在较新版本的CEFSharp中重命名的。
我用Devtools控制台测试了这段代码,我可以调用bound.onSelected函数并将一个字符串从JS传递到我的vb.net应用程序,并使用JS中从网站接收到的字符串触发textbox。
希望这能帮助到外面的一些人,因为似乎有很小的例子。
https://stackoverflow.com/questions/49865889
复制相似问题