使用Xamarin Forms WebView控件,我将覆盖OnBackButtonPressed()并发现CanGoBack在UWP中始终返回false。
我在Android中没有看到这个问题。
这是一个XF错误还是我做错了什么?
注意:我正在运行XF v2.3.3.193
编辑:我升级到XF 2.3.4.247并且问题仍然存在。
答案 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();
}
}