События касания Chromium/CefSharp не запускаются

avatar
user3132295
8 апреля 2018 в 11:59
918
1
0

У меня есть представление модели в приложении wpf, в котором размещается URL-адрес с использованием версии 41 хрома. URL-адрес представляет собой html-страницу с двумя текстовыми входами, и каждый текстовый ввод имеет директиву (angular 1.5), которая привязывает событие «touchstart» к каждому вводу. Когда я открываю URL-адрес в хроме (без оболочки хрома), я вижу, что события касания работают, а когда я открываю URL-адрес под хромом, события касания не запускаются.

Кто-нибудь сталкивался с этой проблемой раньше? возможно ли, что это связано с версией хрома?

мой xaml:

    <Window x:Class="CefSharpTest.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:CefSharpTest"
            xmlns:cefSharp="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf"
            mc:Ignorable="d"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <cefSharp:ChromiumWebBrowser x:Name="MyBrowser" Address="http://localhost:9090/test.html"></cefSharp:ChromiumWebBrowser>
        </Grid>
    </Window>

мой код xaml:

using System.Windows;
    using CefSharp;

    namespace CefSharpTest
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
                MyBrowser.FrameLoadEnd += MyBrowser_FrameLoadEnd;
            }

            private void MyBrowser_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e)
            {
                MyBrowser.ShowDevTools();
            }
        }
    }

мой html:

<html>
    <head>
        <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js"></script>
    </head>
    <body>
        <script>
            $(document).ready(function(){
                $("#txtTest").on("touchstart", function(e){
                    console.log("touch");
                });
                $("#txtTest").on("keydown", function(e){
                    console.log("key down");
                });
            });
        </script>
        <input id="txtTest" type="text" width="250px" height="250px" />
    </body>
</html>

Спасибо

Источник
amaitland
8 апреля 2018 в 22:46
0

Версия WPF не поддерживает сенсорные экраны, вы можете разместить версию WinForms в WPF. Версия 63 является последней поддерживаемой версией.

user3132295
9 апреля 2018 в 07:06
0

Спасибо за ответ, я попробовал это на winform, и это сработало. Есть ли способ заставить его работать на wpf? Я знаю, что у cef есть событие Tuch Down, и оно работает, но мне нужен сенсорный запуск в javascript для определенного ввода

amaitland
9 апреля 2018 в 11:18
0

Вы можете использовать версию WinForms, размещенную в WPF, это моя рекомендация. См. github.com/cefsharp/CefSharp/issues/228 для проблемы с WPF.

Ответы (1)

avatar
user3132295
12 апреля 2018 в 17:49
0

Я нашел решение:

на хроме я зарегистрировался на событие TouchDown, в событии касания я выполнил асинхронный скрипт, который отправляет местоположение (x, y) клиенту относительно браузера. В функции javascript я получаю элемент, используя document.elementFromPoint(x, y); и если элемент введен: текст, я запускаю событие касания.