Xamarin Forms WebView.CanGoBack在UWP上始终返回false

时间:2017-06-15 19:36:32

标签: xamarin uwp xamarin.forms

使用Xamarin Forms WebView控件,我将覆盖OnBackButtonPressed()并发现CanGoBack在UWP中始终返回false。

我在Android中没有看到这个问题。

这是一个XF错误还是我做错了什么?

注意:我正在运行XF v2.3.3.193

编辑:我升级到XF 2.3.4.247并且问题仍然存在。

1 个答案:

答案 0 :(得分:2)

我已经创建了一个代码示例,并在WebView浏览多个网站时重现您的问题。我在Xamarin.Forms源代码中找到了原因。

void UpdateCanGoBackForward()
{
 ((IWebViewController)Element).CanGoBack = Control.CanGoBack;
 ((IWebViewController)Element).CanGoForward = Control.CanGoForward;
}

调用CanGoBack方法时,将更改UpdateCanGoBackForward属性。仅在调用本机UpdateCanGoBackForward事件时才调用NavigationCompleted方法。因此,如果无法快速加载某个网站,则不会更改CanGoBack属性。

您可以通过自定义WebView改进此设计。你可以按照下面的代码。

<强> CustomWebView.cs

CustomWebView添加新属性。

public class CustomWebView : WebView
{
    public bool CCanGoBack { get; set; }

    public CustomWebView()
    {

    }
}

CustomWebViewRenderer.cs

在调用ContentLoading事件时更改属性。

[assembly: ExportRenderer(typeof(CustomWebView), typeof(CustomWebViewRenderer))]

namespace CustomWebViewTest.UWP
{
    public class CustomWebViewRenderer : WebViewRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {
                Control.ContentLoading += Control_ContentLoading;
            }
        }

        private void Control_ContentLoading(Windows.UI.Xaml.Controls.WebView sender, Windows.UI.Xaml.Controls.WebViewContentLoadingEventArgs args)
        {
            (Element as CustomWebView).CCanGoBack = Control.CanGoBack;
        }
    }
}

<强> MainPage.cs

private void backClicked(object sender, EventArgs e)
 {
     if (Browser.CCanGoBack)
     {
         Browser.GoBack();
     }       
 }