私は主にウェブビューを持っているアプリを持っています。私は問題を抱えています。WebView の前の Web ページに移動するための戻るボタンを作成しました。これは正常に機能し、前のページがない場合は MessageBox(Popup) で終了します。問題は、別のページに移動して戻ると、戻るボタンイベントが再帰的にトリガーされ、MessageBox が表示されることです。
Windows.UI.Core.SystemNavigationManager.GetForCurrentView().BackRequested += (s, e) =>
{
e.Handled = true;
if (Web_view.CanGoBack)
{
Web_view.GoBack();
e.Handled = true;
}
else
{
quit();
e.Handled = true;
}
};
上記は私のメインページのコードです
private async void quit()
{
MessageDialog msg = new MessageDialog("Do you really want to quit?", "Quit");
msg.Commands.Add(new UICommand("Yes") { Id = 0 });
msg.Commands.Add(new UICommand("No") { Id = 1 });
var ans = await msg.ShowAsync();
if(ans.Id.Equals(0))
{
//System.Diagnostics.Debug.WriteLine("Exit");
App.Current.Exit();
}
}
これはquit関数のコードです。コードを使用して、これから別のページに移動しています
private void about_Click(object sender, RoutedEventArgs e)
{
Frame.Navigate(typeof(BlankPage1));
}
そして、blankPage1 の backRequested コードは
SystemNavigationManager.GetForCurrentView().BackRequested += (s,e)=>
{
e.Handled = true;
// Windows.UI.Core.SystemNavigationManager.GetForCurrentView().BackRequested -= BlankPage1_BackRequested;
//System.Diagnostics.Debug.WriteLine("BackRequested");
if (Frame.CanGoBack)
{
e.Handled = true;
Frame.GoBack();
}
else
{
e.Handled = true;
}
};
たとえば、アプリを開くと、webview が www.example.com に移動し、そこにあるリンクをたどると、他のページ (www.example.com/link/firstlink など) に移動します。次に、フレームを blankpage1 に移動し、そこから押し戻します。その後、前のページ (www.example.com/link/firstlink) に戻る代わりに、最初のページ (www.example.com) に移動し、終了ポップアップが表示されます。これを修正するにはどうすればよいですか?
たくさんのリプレイありがとうございます。