2017-05-16 133 views
0

我想在本地的Xamarin webview中加載Web應用程序(Readium)。作爲一個目標,我擁有UWP,Android和iOS。 我無法打開index.html頁面,根據https://developer.xamarin.com/guides/xamarin-forms/user-interface/webview/,我在每個項目中嵌入了網頁,但是我得到一個空白頁面。Xamarin Forms Webview本地

已經實現了依賴的服務,爲每一個應用程序,如(UWP)

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

但是,創建一個新的UWP項目(不含Xamarin),它工作得很好,利用該方法NavigateToLocalStreamUri(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 Forms中完成相同的操作? 謝謝。

回答

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")); 
     } 
    } 
} 
} 

我已經按照Xamarin文檔的示例使用自定義呈現,定位平臺3來顯示PDF。我已經在Android和Windows上測試過它: https://developer.xamarin.com/recipes/cross-platform/xamarin-forms/controls/display-pdf/