2016-04-14 1 views
2

UWP WebView wirkt etwas merkwürdig mit Fokus.UWP WebView Fokus

Ich habe eine einseitige TestApp, die vollständig mit WebView abgedeckt ist.

Wenn App einen Fokus erhält, erhält das WebView-Steuerelement den Fokus (und empfängt das GotFocus-Ereignis), aber der Status von DOM document.hasFocus bleibt falsch.

Wenn der Benutzer auf den HTML-Code klickt, wird document.hasFocus wahr und webView empfängt das LostFocus-Ereignis. Das gewünschte/erwartete Verhalten wäre, dass wenn App/Page aktiviert ist, der Inhalt des WebView den Fokus erhält.

Irgendwelche Vorschläge?

XAML:

<Page 
    x:Class="TestApp.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="using:TestApp" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d"> 

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
     <WebView x:Name="webView" NavigationStarting="webView_NavigationStarting" GotFocus="webView_GotFocus" LostFocus="webView_LostFocus"/> 

    </Grid> 
</Page> 

Antwort

0

Die folgenden Methoden sollten Sie Ihr Problem beheben. Führen Sie SetRestoreFocus beim Start aus und stellen Sie einen Verweis auf Ihre Webansicht als Parameter bereit.

private static void SetRestoreFocus(WebView webView) 
    { 
     Window.Current.Activated += async (object sender, WindowActivatedEventArgs e) => 
     { 
      if (e.WindowActivationState != CoreWindowActivationState.Deactivated) 
      { 
       await RestoreFocus(webView); 
      } 
     }; 

     Application.Current.Resuming += async (object sender, object e) => 
     { 
      await RestoreFocus(webView); 
     }; 
    } 

    private static async Task RestoreFocus(WebView webView) 
    { 
     webView.Focus(FocusState.Programmatic); 
     await webView.InvokeScriptAsync("document.focus", new string[] {}); 
    } 

Das Wichtigste ist, dass, nachdem Sie Ihre webview konzentrieren, müssen Sie laufen "document.focus()" in Ihrem Javascript. Dadurch wird das html-Element, das im Fokus war, automatisch neu ausgerichtet, bevor Ihre App gesperrt oder nicht mehr aktiv war.