Поймать событие щелчка мыши - PullRequest
0 голосов
/ 07 февраля 2019

Я действительно погуглил это до смерти, но не нашел ничего, что могло бы сильно помочь.Я использую C # WPF cefsharp.wpf cefSharp: ChromiumWebBrowser

Все, что я хочу сделать - это когда пользователь нажимает что-либо на веб-странице, я хочу поймать событие щелчка мыши в c #.Причина в том, что у меня на странице работает javascript, который регистрирует то, на что нажали, и возвращает значение.Поэтому мне нужно получить это значение из JavaScript.Все настроено.Я просто не могу получить C #, чтобы зарегистрировать, что браузер был нажат.C # не нужно знать, какой элемент был нажат на странице, JavaScript обрабатывает это для меня.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 07 февраля 2019

Если вы захватываете событие клика в своем JavaScript, чтобы получить то, что выбрано на странице, которое, по сути, является вашим событием.В вашем JavaScript вызовите метод C # из этого клика.

Например, в приложении, которое я написал, у меня отображалась страница D3 в CefSharp, на которой была показана схема раскладки, когда пользователь нажимал на элемент в раскладке, JavaScript отправлял идентификатор этого элемента на 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");
        }
    }
...