我无法获得后面的硬件按钮来执行我希望它为
Windows Phone 8执行的操作.该应用程序严格来说只是webview,所以截至现在当单击后退(硬件)按钮时它会关闭应用程序.我如何解决这个问题,以便进入上一个网页或返回索引或其他内容?
谢谢
namespace AvoidDiabetes { public partial class MainPage : PhoneApplicationPage { // Url of Home page private string MainUri = "/Html/index.html"; private Stack<Uri> _history = new Stack<Uri>(); private Uri _current = null; // Constructor public MainPage() { InitializeComponent(); } private void Browser_Loaded(object sender,RoutedEventArgs e) { // Add your URL here Browser.Navigate(new Uri(MainUri,UriKind.Relative)); Browser.IsScriptEnabled = true; } // Navigates back in the web browser's navigation stack,not the applications. private void BackApplicationBar_Click(object sender,EventArgs e) { Browser.GoBack(); } // Navigates forward in the web browser's navigation stack,not the applications. private void ForwardApplicationBar_Click(object sender,EventArgs e) { Browser.GoForward(); } // Navigates to the initial "home" page. private void HomeMenuItem_Click(object sender,EventArgs e) { Browser.Navigate(new Uri(MainUri,UriKind.Relative)); } // Handle navigation failures. private void Browser_NavigationFailed(object sender,System.Windows.Navigation.NavigationFailedEventArgs e) { MessageBox.Show("Navigation to this page Failed,check your internet connection"); } protected override void OnBackKeyPress(CancelEventArgs e) { base.OnBackKeyPress(e); if (_history.Count == 0) { // No history,allow the back button // Or do whatever you need to do,like navigate the application page return; } // Otherwise,if this isn't the first navigation,push the current else { Browser.GoBack(); } } private async void WebBrowser_Navigated(object sender,NavigationEventArgs e) { // If we navigated back,pop the last entry if (_history.Count > 0 && _history.Peek() == e.Uri) { _history.Pop(); } // Otherwise,push the current else if (_current != null) { _history.Push(_current); } // The current page is now the one we've navigated to _current = e.Uri; } }
}
您需要在应用程序页面中覆盖
OnBackKeyPress并处理将
WebBrowser控件导航回上一页.
假设您正在使用C#,这里大概是如何做到的(将WebBrowser_Navigated连接到WebBrowser的Navigated事件):
private Stack<Uri> _history = new Stack<Uri>(); private Uri _current = null; protected override void OnBackKeyPress(CancelEventArgs e) { base.OnBackKeyPress(e); if (_history.Count == 0) { // No history,allow the back button // Or do whatever you need to do,like navigate the application page return; } // Cancel the back button press e.Cancel = true; // Navigate to the last page Browser.Navigate(_history.Peek()); } private async void WebBrowser_Navigated(object sender,NavigationEventArgs e) { // If we navigated back,pop the last entry if (_history.Count > 0 && _history.Peek() == e.Uri) { _history.Pop(); } // Otherwise,push the current else if (_current != null) { _history.Push(_current); } // The current page is now the one we've navigated to _current = e.Uri; }