我确实用谷歌搜索了一下,但没有找到任何有帮助的东西。 我正在使用C#WPF cefsharp.wpf cefSharp:ChromiumWebBrowser
我想要做的就是,当用户单击网页上的任何内容时,我想捕捉c#中的鼠标单击事件。原因是我在页面上运行了javascript,该javascript注册了单击的内容并传回了一个值。因此,我需要从javascript中获取该值。一切都已设置。我只是无法让C#注册浏览器已被单击。 C#不需要知道在页面上单击了什么元素,JavaScript会为我处理。
任何帮助将不胜感激。
答案 0 :(得分:2)
您需要在鼠标按下事件上添加处理程序
<wpf:ChromiumWebBrowser Grid.Column="1" Grid.Row="0" x:Name="myBrowser" UseLayoutRounding="True"/>
myBrowser.AddHandler(UIElement.MouseUpEvent, new MouseButtonEventHandler(Browser_MouseUp), true);
private static void Browser_MouseUp(object sender, MouseButtonEventArgs e)
{//Check for button that was clicked and e.Source ...
}
答案 1 :(得分:1)
如果您正在JavaScript中捕获click事件,以获取实际上是您的事件的页面上选定的内容。在您的JavaScript中,从该单击中调用C#方法。
例如,在我写的一个应用程序中,我在CefSharp中渲染了一个D3页面,其中显示了一个力布局图,当用户单击该力布局中的某个项目时,JavaScript将该项目的ID发送给了C#,这反过来又将其发送给C#将序列化的数据返回给JavaScript,然后显示出来(实际上,我有一个C#类,它充当CefSharp和我的模型之间的往来于JavaScript的序列化层)。听起来您需要采取类似的方法来实现目标,而不需要在浏览器控件本身上进行实际的点击事件。
我在下面添加了一些示例代码,这些代码在CefSharp中(在index.html中定义)在屏幕上显示了一个按钮。单击该按钮时,它将页面中的值传递给JsHandler类,该类又显示一个带有该值的消息框。
Mainwindow.xaml
<Window x:Class="CefSharpWPF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:CefSharpWPF"
xmlns:wpf="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<wpf:ChromiumWebBrowser Grid.Row="0"
x:Name="Browser" />
</Grid>
</Window>
Mainwindow.cs
public partial class MainWindow : Window
{
JsHandler jsHandler = new JsHandler();
public MainWindow()
{
InitializeComponent();
Browser.Address = Environment.CurrentDirectory + "/index.html";
Browser.JavascriptObjectRepository.Register("jsHandler", jsHandler);
}
}
index.html
<html>
<head>
<script type="text/javascript">
CefSharp.BindObjectAsync("jsHandler", "jsHandler");
</script>
<title>Test Page</title>
</head>
<body>
<button onclick="window.jsHandler.handleJsCall(1)">button</button>
</body>
</html>
JsHandler.cs
class JsHandler
{
public void HandleJsCall(int arg)
{
MessageBox.Show($"Value Provided From JavaScript: {arg.ToString()}", "C# Method Called");
}
}