Хорошо, у меня есть игра C++/CX/XAML UWP, работающая на Xbox One.
У него есть SwapChainPanel, содержащий оверлей WebView для пользовательского интерфейса и Canvas, на котором запускается игра.
Когда я запускаю Webview, он становится полноэкранным, а холст ничего не делает. Контроллер перемещается по веб-интерфейсу без проблем: вверх/вниз/влево/вправо, «a» для выбора и «b» для возврата/приостановки. Эта навигация выполняется с использованием API JS Gamepad, а не в режиме мыши.
Проблема возникает, когда я выбираю поле ввода в веб-просмотре. Я могу выделить поле, я могу нажать A, я могу уйти, но я не помещаю курсор в поле, и экранная клавиатура не появляется. Это проблема; Я не могу ничего ввести в поле ввода.
Однако, если я нажму кнопку «Xbox» на контроллере, чтобы открыть боковую панель «Руководство», а затем снова нажму кнопку «Xbox», чтобы закрыть ее, внезапно в выбранном поле ввода появится курсор, а нажатие «a» вызовет мягкая клавиатура и все в порядке. С этого момента любое текстовое поле, которое я выбираю, работает абсолютно нормально.
Итак, почему это не работает, когда я впервые загружаю приложение? Что я не делаю из того, что мне нужно сделать?
Я подозревал какую-то проблему с фокусом, но использование GotFocusEventHandler() для сообщения о событиях фокуса только что показало, что веб-просмотр получает фокус при запуске приложения, и то же самое при возврате из боковой панели руководства. Принудительный вызов webView->Focus(FocusState::Programmatic); когда поле ввода было выделено, не сообщалось о событии фокуса, предположительно потому, что веб-просмотр уже был в фокусе.
При дальнейшем изучении страница работает нормально, если я обращаюсь к ней через URL-адрес HTTP, но не работает, если я использую HTTPS. Я не вижу явных сообщений об ошибках, и обе версии URL-адреса присутствуют в разделе Content URI манифеста.
Я упростил приложение до небольшой модификации базового приложения-шаблона, и проблема все еще существует, поэтому я подозреваю, что это что-то в обработке Edge WebView на Xbox One. Я посмотрю, смогу ли я упростить веб-страницы.
Еще не получил более простую страницу, но отметил, что она отлично работает, если я обращаюсь к странице через Http, но не работает, если я использую Https





ОК, после долгих исследований и многих тупиков следующий код устранил эту проблему, которая, как я должен предположить, является ошибкой в Edge WebView.
webView->Visibility = Visibility::Collapsed;
webView->Visibility = Visibility::Visible; // Yes, I know I just changed this but it needs changing twice.
webView->Focus(FocusState::Programmatic);
Если вы пропустите любую из этих строк, все это не сработает.
Чтобы помочь вам диагностировать эту проблему, не могли бы вы предоставить минимальный воспроизводимый пример?