是否可以在框架中的 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

中加载的上一个页面

祝你好运。