2017-05-16 5 views
0

Xamarin이있는 웹보기에서 웹 응용 프로그램 (Readium)을 로컬로로드하려고합니다. 대상으로 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:///"; 
     } 
    } 
} 

(자 마린)없이 새로운 UWP 프로젝트를 생성 (UWP) 각 애플리케이션에 의존 서비스를 구현 (URI, 새로운 StreamUriWinRTResolver ()) with

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 Forms에서 수행 할 수 있습니까? 감사합니다.

답변

1

마지막으로 로컬 콘텐츠를로드하여 각 플랫폼에 대한 사용자 지정 렌더링을 추가합니다.

예 (UWP) :

나는 3 개 플랫폼을 대상으로, 렌더링 사용자 정의 사용하여 PDF를 표시 자 마린의 문서의 예를 따랐습니다
[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")); 
     } 
    } 
} 
} 

. Android 및 Windows에서 테스트했습니다. https://developer.xamarin.com/recipes/cross-platform/xamarin-forms/controls/display-pdf/