Текущая проблема:
Ключевые события в WebView2:
- При нажатии левого Alt я получаю событие нажатия клавиши, но событие нажатия клавиши часто пропускается.
- При нажатии AltGr событие нажатия клавиши распознается непоследовательно, часто как Ctrl или Alt, а иногда получает «застрял».
- После «зависания» состояние Alt кажется кэшированным WebView2, а последующие нажатия клавиш (например, Ctrl) заставляют WebView2 «освободить» кэшированное состояние.
- Я хочу надежно обрабатывать Alt и клавиши AltGr внутри приложения без каких-либо несоответствия.
- Мне нужно заблокировать поведение Alt при навигации по умолчанию в WebView2 (например, снятие фокуса с WebView2 или активация скрытых меню).
- Я не привязан конкретно к WebView2. Если у кого-то есть решение для устаревшего WebView, я готов его заменить.
Настройки WebView2:
- Задайте AreBrowserAcceleratorKeysEnabled = false, чтобы отключить ярлыки на уровне браузера.< /li>
- Использовались CoreWindow.KeyDown и KeyUp для глобального захвата и обработки ключей. Однако эти события не всегда запускаются, когда WebView2 находится в фокусе.
- Внедрены прослушиватели нажатия клавиш и нажатия клавиш с помощью AddScriptToExecuteOnDocumentCreatedAsync. Хотя это в некоторой степени работает, оно не отражает достоверно физическое состояние клавиш Alt и AltGr.
- Программно WebView2 был переориентирован на нажатие определенных клавиш (например, Alt), но это привело к дополнительным несоответствиям.
Иногда на события KeyUp и KeyDown осуществляется подписка от:
Код: Выделить всё
if (Window.Current != null && Window.Current.CoreWindow != null)
{
Window.Current.CoreWindow.KeyDown += CoreWindow_KeyDown;
Window.Current.CoreWindow.KeyUp += CoreWindow_KeyUp;
Debug.WriteLine("KeyDown and KeyUp event handlers registered.");
}
Левый Alt:
-keydown работает, но клавишу часто пропускают. Как только клавиша «застряла», последующие нажатия несвязанных клавиш (например, Ctrl) приводят к обработке кэшированной клавиатуры.
AltGr:-Подобно левому Alt, нажатие клавиши часто ошибочно интерпретируется как Ctrl или Alt. Поведение непоследовательно и варьируется в зависимости от последующего нажатия других клавиш.
Вопрос:
Как я могу надежно обрабатывать Alt и ключевые события AltGr в WebView2 или WebView в приложении UWP? В частности:
- Как я могу заблокировать или отключить поведение Alt по умолчанию (например, навигацию)?
- Как можно Я гарантирую последовательную обработку AltGr без неправильного кэширования нажатия/нажатия клавиш?
Мне известно, что WebView2 официально не поддерживается в UWP, и я также проверил это с помощью устаревшего элемента управления WebView. Если у кого-то есть надежное решение для WebView, я буду рад вернуться к нему.
Я изучал решения, включающие глобальные перехваты клавиш, управление фокусом и внедрение JavaScript, но ни одно из них не решило проблему полностью.< /p>
Код
Глобальные обработчики ключей:
Код: Выделить всё
private void CoreWindow_KeyDown(CoreWindow sender, KeyEventArgs args)
{
Debug.WriteLine($"Global KeyDown: {args.VirtualKey}");
if (args.VirtualKey == VirtualKey.Menu) // Left Alt
{
Debug.WriteLine("Alt detected, resetting focus to WebView2.");
args.Handled = true; // Prevent default behavior
ExamBrowser.Focus(FocusState.Programmatic); // Refocus WebView2
}
}
private void CoreWindow_KeyUp(CoreWindow sender, KeyEventArgs args)
{
Debug.WriteLine($"Global KeyUp: {args.VirtualKey}");
if (args.VirtualKey == VirtualKey.Menu) // Left Alt
{
Debug.WriteLine("Alt key released.");
args.Handled = true; // Prevent default behavior
}
}
Код: Выделить всё
document.addEventListener('keydown', function(event) {
let message = {
type: 'keydown',
key: event.key,
code: event.code,
ctrlKey: event.ctrlKey,
altKey: event.altKey,
shiftKey: event.shiftKey,
metaKey: event.metaKey
};
window.chrome.webview.postMessage(JSON.stringify(message));
});
document.addEventListener('keyup', function(event) {
let message = {
type: 'keyup',
key: event.key,
code: event.code,
ctrlKey: event.ctrlKey,
altKey: event.altKey,
shiftKey: event.shiftKey,
metaKey: event.metaKey
};
window.chrome.webview.postMessage(JSON.stringify(message));
});
- ОС: Windows 10
< li>Платформа: UWP с WebView2 (на основе Chromium) и WebView (протестировано на устаревшие версии) - Версия WebView2: 1.0.113 — предварительная версия
Подробнее здесь: https://stackoverflow.com/questions/793 ... -or-webvie
Мобильная версия