Xamarin Forms WebView.CanGoBack总是返回false在UWP
问题描述:
使用Xamarin Forms WebView控件,我重写了OnBackButtonPressed()并发现CanGoBack在UWP中总是返回false。Xamarin Forms WebView.CanGoBack总是返回false在UWP
我在Android中看不到这个问题。
这是一个XF错误还是我做错了什么?
注:我运行XF v2.3.3.193
编辑:我升级到XF 2.3.4.247和问题仍然存在。
答
我创建了一个代码示例,并在WebView浏览多个网站时重现您的问题。我在Xamarin.Forms源代码中发现了原因。当调用UpdateCanGoBackForward
方法
void UpdateCanGoBackForward()
{
((IWebViewController)Element).CanGoBack = Control.CanGoBack;
((IWebViewController)Element).CanGoForward = Control.CanGoForward;
}
的CanGoBack
属性将被改变。只有在调用本地NavigationCompleted
事件时才会调用UpdateCanGoBackForward
方法。因此,如果某个网站无法快速加载,则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();
}
}
只是一个评论说,这虽然解决UWP,它打破了Android的(因为我没有对机器人定制呈现)。我不确定在Android渲染器中做什么,而不是创建一个,我只是做一个RuntimePlatform检查,并根据平台检查CCanGoBack或CanGoBack。 – erin