Blazor Hybrid で F5 キーでリフレッシュなどのブラウザ固有のキー操作を無効化したい

2024/01/07に公開

Blazor Hybrid では BlazorWebView をネイティブの画面に埋め込んでいます。この BlazorWebView ですが Windows の場合はブラウザと同じように F5 キーで画面がリフレッシュされたりといったブラウザ固有のキー操作が有効になっています。場合によっては、この操作を無効化したくなると思います。今回はこの操作を無効化する方法について紹介します。
因みに、今回の内容ですが Windows 以外の場合では確認できていません。

BlazorWebView では、WebView2 が内部で使われています。この WebView2 では F5 キーなどのキーを無効化にするオプションがあります。Blazor Hybrid で、この WebView2 が生成された直後にアクセスするには BlazorWebView コントロールの BlazorWebViewInitialized イベントを使用します。以下のように XAML で指定すると簡単だと思います。コードビハインドでやっても大丈夫です。

<blazor:BlazorWebView
    x:Name="blazorWebView"
    BlazorWebViewInitialized="BlazorWebViewInitialized"
    HostPage="wwwroot/index.html"
    Services="{x:Static local:App.ServiceProvider}">
    <blazor:BlazorWebView.RootComponents>
        <blazor:RootComponent ComponentType="{x:Type local:Routes}" Selector="#app" />
    </blazor:BlazorWebView.RootComponents>
</blazor:BlazorWebView>

BlazorWebViewInitialized イベントのイベント引数の BlazorWebViewInitializedEventArgsWebView プロパティで WebView2 のインスタンスにアクセスできます。
WebView2CoreWebView2.Settings.AreBrowserAcceleratorKeysEnabledfalse を設定するとブラウザ固有のキー操作を無効化できます。以下のようなコードになります。

private void BlazorWebViewInitialized(object sender, BlazorWebViewInitializedEventArgs e)
{
    // F5 キーなどを無効化する
    e.WebView.CoreWebView2.Settings.AreBrowserAcceleratorKeysEnabled = false;
}
Microsoft (有志)

Discussion