WebViewで複数のWebサイトを参照すると、コードサンプルが作成され、問題が再現されています。そして、私はXamarin.Formsソースコードの理由を見つけました。 UpdateCanGoBackForward
メソッドが呼び出されたとき
void UpdateCanGoBackForward()
{
((IWebViewController)Element).CanGoBack = Control.CanGoBack;
((IWebViewController)Element).CanGoForward = Control.CanGoForward;
}
CanGoBack
プロパティが変更されます。ネイティブのNavigationCompleted
イベントが呼び出された場合にのみ、UpdateCanGoBackForward
メソッドが呼び出されました。したがって、一部のWebサイトをすぐに読み込めない場合は、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