2017-05-16 18 views
0

Webアプリケーション(Readium)をXamarinでローカルに読み込もうとしています。ターゲットとしては、UWP、Android、iOSがあります。 https://developer.xamarin.com/guides/xamarin-forms/user-interface/webview/によると、index.htmlのページを開くことができません。それぞれのプロジェクトにウェブを埋め込んでいますが、空白のページが表示されます。Xamarin Forms Webview local

が、それは方法NavigateToLocalStreamUriを使用して、うまく機能などが

assembly: Dependency(typeof(BaseUrl))] 
namespace WorkingWithWebview.UWP 
{ 
    public class BaseUrl : IBaseUrl 
    { 
     public string Get() 
     { 
      return "ms-appx-web:///"; 
     } 
    } 
} 

、(Xamarinなし)新しいUWPプロジェクトを作成(UWP)として各アプリケーションの依存関係サービスを実装している (URI、新しいStreamUriWinRTResolver( ))と

public IAsyncOperation<IInputStream> UriToStreamAsync(Uri uri) 
{ 
    if (uri == null) 
    { 
     throw new Exception(); 
    } 
    string path = uri.AbsolutePath;  
    return GetContent(path).AsAsyncOperation(); 
} 

private async Task<IInputStream> GetContent(string path) 
{   
    try 
    { 
     Uri localUri = new Uri("ms-appx:///cloud-reader" + path); 
     StorageFile f = await StorageFile.GetFileFromApplicationUriAsync(localUri); 
     IRandomAccessStream stream = await f.OpenAsync(FileAccessMode.Read); 
     return stream; 
    } 
    catch (Exception) 
    { 
     throw new Exception("Invalid path"); 
    } 
} 

Xamarinフォームではどのようなやり方がありますか? ありがとうございます。

答えて

1

最後に、ローカルコンテンツをロードして各プラットフォームのカスタムレンダリングを追加します。

例(UWP):

[assembly: ExportRenderer(typeof(WebView), typeof(WebViewRenderer))] 
namespace DisplayEpub.UWP{ 
public class CustomWebViewRenderer : WebViewRenderer 
{ 
    protected override void OnElementChanged(ElementChangedEventArgs<WebView> e) 
    { 
     base.OnElementChanged(e); 

     if (e.NewElement != null) 
     { 
      var customWebView = Element as WebView; 
      Control.Source = new Uri(string.Format("ms-appx-web:///Assets/pdfjs/web/viewer.html")); 
     } 
    } 
} 
} 

私は、カスタム3のプラットフォームをターゲットに、レンダリング使用してPDFを表示するには、Xamarinのドキュメントの例を踏襲してきました。 AndroidとWindowsでテストしました: https://developer.xamarin.com/recipes/cross-platform/xamarin-forms/controls/display-pdf/

関連する問題