5

Trong dự án Xamarin di động chia sẻ của tôi, điều này hoạt động trên UWP, Windows Phone 8.1 và Windows 8.1:Webview baseurl trong Xamarin.Forms trên UWP và Windows Phone 8.1

HtmlWebViewSource htmlSource = new HtmlWebViewSource(); 
htmlSource.Html = @"<html><body><img src='ms-appx-web:///Assets/somePicture.png' /></body></html>"; 
htmlSource.BaseUrl = DependencyService.Get<IBaseUrl>().Get(); 
WebView webView = new WebView 
{ 
     Source = htmlSource, 
}; 

Rõ ràng, đây không phải vượt qua - nền tảng (iOS và Android). Tôi muốn điều này, nhưng nó không hoạt động trên UWP, Windows Phone 8.1 và Windows 8.1:

HtmlWebViewSource htmlSource = new HtmlWebViewSource(); 
htmlSource.Html = @"<html><body><img src='somePicture.png' /></body></html>"; 
htmlSource.BaseUrl = DependencyService.Get<IBaseUrl>().Get(); 
WebView webView = new WebView 
{ 
     Source = htmlSource, 
}; 

IBaseUrl: thực hiện

public interface IBaseUrl { string Get(); } 

baseurl cho UWP, Windows Phone 8.1 và Windows 8.1, được lấy từ một Windows Phone 8.0 sample project:

[assembly: Dependency(typeof(MyApp.UWP.BaseUrl))] 
namespace MyApp.UWP 
{ 
    public class BaseUrl : IBaseUrl 
    { 
     public string Get() 
     { 
      return ""; // "ms-appx-web:///Assets/" doesn't work 
     } 
    } 
} 

tôi đã cố gắng biến thể khác nhau trở về baseurl của "ms-appx-web: /// Assets /", "ms-appx-web: ///", đặt các tập tin trong gốc của dự án hoặc trong phần "As bộ ”dir, không có gì hoạt động.

Theo như tôi có thể biết, điều này được sử dụng để hoạt động trên Windows Phone 8.0.

Trả lời

3

Điều gì về Device.OnPlatform?

var urlIos = @"somePicture.png"; 
var urlAndroid = @"somePicture.png"; 
var urlUWP = @"ms-appx-web:///Assets/somePicture.png"; 
htmlSource.Html = string.Format(@"<html><body><img src='{0}' /></body></html>", Device.OnPlatform(urlIos, urlAndroid, urlUWP)); 
+0

Điều này có thể hiệu quả, nhưng nó phải được thực hiện cho mỗi URL duy nhất, điều này không cho tôi là giải pháp tốt nhất –

+1

Hmm, tôi xem vấn đề của bạn. Tôi không thể tìm ra BaseUrl với UWP. Nhưng làm thế nào về Regex.Replace? Điều này có thể hoạt động. – Matt

+0

Tôi đang làm việc trên dự án nền tảng Xamarin, nơi tôi đặt các hình ảnh bên trong thư mục con mà nó không tải trên màn hình. "ms-appx: ///Assets/abc.png" – Ashaar

Các vấn đề liên quan