是否可以在框架中的 webview 上进行后退导航?
Is back navigation on webview in a frame possible?
在我的 Windows 10 UWP 应用程序中,我使用 MainPage 作为导航汉堡菜单。所有其他页面都加载到 MainPage 上名为 MyFrame 的框架中。使用以下代码,此框架内的后退导航可以完美运行:
private void MainPage_BackRequested(object sender, BackRequestedEventArgs e)
{
if (MyFrame.CanGoBack)
{
MyFrame.GoBack();
e.Handled = true;
}
}
但是其中一个页面包含 WebView。加载此页面时,我希望 webview 而不是框架来执行 GoBack 事件。
是否可以通过某种方式从 MainPage 访问 WebView 的 CanGoBack 属性?
编辑:也许这样的方法可行?
private void MainPage_BackRequested(object sender, BackRequestedEventArgs e)
{
if (MyFrame.Content == typeof(Web))
{
get state of the Webview "SearchURI" here and handle the GoBack event
}
else if (MyFrame.CanGoBack)
{
MyFrame.GoBack();
e.Handled = true;
}
}
WebView
已经有CanGoBack
属性和GoBack
方法供您使用。使用这些方法,您可以使用 BackButton
并控制您的后键进程。
下面是我会怎么做。
在你的 Web.xaml.cs
中声明一个 public 变量
public WebView myWebView { get; private set; }
并在您的页面构造函数中,将实际的 WebView
引用分配给该变量。
public Web()
{
this.InitializeComponent();
myWebView = this.webView;
}
现在在你 MainPage.xaml.cs
,你用来导航的按钮,订阅 BackRequested
SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible;
SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested;
现在您的 OnnackRequested
将显示如下内容。
private void OnBackRequested(object sender, BackRequestedEventArgs e)
{
if (MyFrame.Content.GetType() == typeof(Web))
{
Web web = MyFrame.Content as Web;
if (web.myWebView.CanGoBack)
{
web.myWebView.GoBack();
}
else
{
if (MyFrame.CanGoBack)
{
e.Handled = true;
MyFrame.GoBack();
}
}
}
}
除非 webview 导航回您的初始页面,否则您将无法返回到 MyFrame
中加载的上一个页面
祝你好运。
在我的 Windows 10 UWP 应用程序中,我使用 MainPage 作为导航汉堡菜单。所有其他页面都加载到 MainPage 上名为 MyFrame 的框架中。使用以下代码,此框架内的后退导航可以完美运行:
private void MainPage_BackRequested(object sender, BackRequestedEventArgs e)
{
if (MyFrame.CanGoBack)
{
MyFrame.GoBack();
e.Handled = true;
}
}
但是其中一个页面包含 WebView。加载此页面时,我希望 webview 而不是框架来执行 GoBack 事件。
是否可以通过某种方式从 MainPage 访问 WebView 的 CanGoBack 属性?
编辑:也许这样的方法可行?
private void MainPage_BackRequested(object sender, BackRequestedEventArgs e)
{
if (MyFrame.Content == typeof(Web))
{
get state of the Webview "SearchURI" here and handle the GoBack event
}
else if (MyFrame.CanGoBack)
{
MyFrame.GoBack();
e.Handled = true;
}
}
WebView
已经有CanGoBack
属性和GoBack
方法供您使用。使用这些方法,您可以使用 BackButton
并控制您的后键进程。
下面是我会怎么做。
在你的 Web.xaml.cs
中声明一个 public 变量
public WebView myWebView { get; private set; }
并在您的页面构造函数中,将实际的 WebView
引用分配给该变量。
public Web()
{
this.InitializeComponent();
myWebView = this.webView;
}
现在在你 MainPage.xaml.cs
,你用来导航的按钮,订阅 BackRequested
SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible;
SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested;
现在您的 OnnackRequested
将显示如下内容。
private void OnBackRequested(object sender, BackRequestedEventArgs e)
{
if (MyFrame.Content.GetType() == typeof(Web))
{
Web web = MyFrame.Content as Web;
if (web.myWebView.CanGoBack)
{
web.myWebView.GoBack();
}
else
{
if (MyFrame.CanGoBack)
{
e.Handled = true;
MyFrame.GoBack();
}
}
}
}
除非 webview 导航回您的初始页面,否则您将无法返回到 MyFrame
祝你好运。