2017-06-15 36 views
0

XamarinフォームWebViewコントロールを使用して、OnBackButtonPressed()をオーバーライドし、CanGoBackが常にUWPでfalseを返すことを確認します。XamarinフォームWebView.CanGoBackは常にUWPでfalseを返します

Androidではこの問題は発生しません。

これはXFバグですか、何か間違っていますか?

注:私はXF v2.3.3.193

EDITを実行しています:私は、XF 2.3.4.247にアップグレードし、問題が解消されません。

答えて

2

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(); 
    }  
} 
+0

これはUWPを修正しましたが、(私はドロイドのカスタムレンダラを持っていなかったので)、それは、Androidを破ったことだけコメント。 Androidレンダラーで何をするかわからなかったので、プラットフォームを作成するのではなく、RuntimePlatformチェックを行い、プラットフォームに応じてCCanGoBackかCanGoBackをチェックします。 – erin

関連する問題