【发布时间】:2020-10-01 15:19:19
【问题描述】:
我在我的程序集中嵌入了站点:
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
WebView.Navigating += WebView_Navigating;
var resourceName = Program.GetResourceName("index.html");
WebView.Source = new UrlWebViewSource()
{
Url = "file://" + resourceName,
};
}
public void WebView_Navigating(object sender, WebNavigatingEventArgs args)
{
if (args.Url.StartsWith("file://"))
{
return;
}
Device.OpenUri(new Uri(args.Url));
args.Cancel = true;
}
}
我试图弄清楚如何使用WebView 使用Xamarin.Forms 运行它...
我从我的程序集中获得了嵌入式资源,我需要以某种方式将基于文本的 html 加载到 WebView ...
但我不知道该怎么做...... 是否有一些 API 用于将嵌入式资源加载到 WebView 中?
经过一番研究,我找到了一些解决方案:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using BlazorXamarinMobile.Web.Client;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace BlazorXamarinMobile
{
public partial class MainPage : ContentPage
{
Dictionary<string, string> _urlToHtml = new Dictionary<string, string>();
public MainPage()
{
InitializeComponent();
WebView.Navigating += WebView_Navigating;
(string embeddedResource, string text) = Program.GetResourceName("index.html");
embeddedResource = embeddedResource.Replace("wwwroot.index.html", "wwwroot/index.html");
var embeddedResourceUrl = "file://" + embeddedResource;
_urlToHtml.Add("file://BlazorXamarinMobile.Web.Client.wwwroot/".ToLower(), text);
_urlToHtml.Add(embeddedResourceUrl.ToLower(), text);
WebView.Source = new HtmlWebViewSource()
{
BaseUrl = "file://BlazorXamarinMobile.Web.Client.wwwroot/".ToLower(),
Html = text,
};
}
public void WebView_Navigating(object sender, WebNavigatingEventArgs args)
{
if (args.Url.StartsWith("file://"))
{
if (args.Url.Contains("wwwroot/"))
{
var html = _urlToHtml[args.Url];
WebView.Source = new HtmlWebViewSource()
{
Html = html,
};
}
return;
}
args.Cancel = true;
}
}
}
但是WebView显示Url无效!! 但是,如果我直接加载文本,它会显示初始站点和重新加载应用程序的错误......这是因为 WebView 尝试从自定义路径文件加载,但这些文件在 Assembly 内部,应该使用某种钩子手动加载...
可以吗?
【问题讨论】:
标签: xamarin xamarin.forms webview blazor