为什么 XAML WebView 输入框没有光标,直到我 open/close XBox One 上的指南?

Why does XAML WebView Input Box not have cursor until I open/close Guide on XBox One?

好的,我在 Xbox One 上有一个 C++/CX/XAML UWP 游戏 运行。

它有一个 SwapChainPanel,其中包含用于 UI 覆盖的 WebView 和一个运行游戏的 Canvas。

当我启动时,Webview 是全屏的,canvas 什么也没做。 控制器浏览 Web UI 没问题,up/down/left/right、'a' 用于 select 和 'b' 用于 back/suspend。此导航是使用 JS 游戏手柄 API 而不是鼠标模式完成的。

当我在 webview 中 select 输入字段时出现问题。 我可以突出显示该框,我可以按 A,我可以离开,但我没有在框中找到光标,也没有出现软键盘。这就是问题;我在输入框中无法输入任何内容

但是,如果我按控制器上的 'Xbox button' 调出指南侧边栏,然后再次按 'Xbox button' 关闭它,突然 select 中出现一个光标ed 输入框并按 'a' 调出软键盘,一切正常。从这一点开始,我 select 的任何文本框都可以正常工作。

那么,为什么我第一次加载应用程序时它不起作用?我没有做什么我需要做的?

我怀疑是某种焦点问题,但使用 GotFocusEventHandler() 报告焦点事件只显示 Webview 在应用程序启动时获得焦点,从指南侧边栏返回时也是如此。 强制调用 webView->Focus(FocusState::Programmatic);当输入框高亮时没有报告焦点事件,估计是因为webview已经是焦点了。

经进一步调查,如果我通过 HTTP URL 访问该页面,该页面可以正常工作,但如果我使用 HTTPS,则该页面无法正常工作。我看不到任何明显的错误消息,URL 的两个版本都存在于清单

的内容 URI 部分

好的,经过大量调查和许多死胡同,以下代码解决了这个问题,我不得不假设这是 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);

如果您错过了其中任何一行,则整个过程将无法正常进行。