2016-04-14 14 views
2

UWP WebViewは、焦点を合わせて奇妙な動作をします。UWP WebViewフォーカス

WebViewで完全にカバーされている1ページのTestAppがあります。

アプリケーションがフォーカスを取得すると、WebViewコントロールはフォーカスを取得し、GotFocusイベントを受信しますが、DOM document.hasFocusの状態はfalseのままです。

ユーザーがhtmlをクリックすると、document.hasFocusがtrueになり、webViewはLostFocusイベントを受け取ります。

App/Pageがアクティブになっている場合、WebViewのコンテンツにのコンテンツがフォーカスすることになります。

提案がありますか?

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> 

答えて

0

次の方法で問題を修正する必要があります。起動時にSetRestoreFocusを実行し、パラメータとしてWebviewへの参照を提供します。

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[] {}); 
    } 

重要なことは、あなたがあなたのWebViewを集中した後、あなたはJavaScriptで「document.focusを()」を実行する必要があるということです。これにより、アプリが中断される前にフォーカスされていたhtml要素が自動的に再フォーカスされます。

関連する問題