首页 > 解决方案 > UWP 无法使用自定义 OSK 在 webview 的文本框中输入数据

问题描述

我有一个在 webview 中运行的 Angular 应用程序和一个在 uwp 中运行的自定义屏幕键盘(OSK)。我无法使用自定义 OSK 在 webview 中的文本框中输入数据,尽管它对于普通的 UWP 文本框工作正常。当我单击 OSK 时,它似乎失去了焦点。

我已经尝试WebView.Focus(FocusState.Programmatic)并调用InvokeScriptAsync用于将焦点设置回 WebViewLostFocus事件中的 webview 的脚本,但没有任何效果。

我也尝试使用焦点管理器。

FocusMovementResult result;
result = await FocusManager.TryFocusAsync(WebView, FocusState.Programmatic);

我正在使用InputInjector.

inputKey.VirtualKey = ((ushort)((VirtualKey)Enum.Parse(typeof(VirtualKey), input.Text, true)));
inputInjector.InjectKeyboardInput(new[] { inputKey });

对于 OSK,该AllowFocusOnInteraction属性也设置为 False。 <app:Keyboard x:Name="keyboard" AllowFocusOnInteraction="False"/>

标签: c#.netwebviewuwpon-screen-keyboard

解决方案


我能够通过 window.external.notify使用事件侦听器通知 UWP 关于模糊事件并使用此通知命令将焦点设置回 webview 来解决它

webview.Focus(FocusState.Programmatic);
await webView.InvokeScriptAsync(@"eval", new string[] { "document.focus()" });

推荐阅读