Xamarin IOS WebView 中的图像加载问题
Xamarin IOS image load problem in WebView
我在 Xamarin 中有一个简单的 WebView。我在 Windows 上使用 VisualStudio 2022。
我下载了一张图片。图像是存在的。我可以将它加载到 ImageView 中。
我想用其他 html 代码在 WebView 中显示图像。
一个简单的测试代码:
private async void WebViewImagetest()
{
string imageName = "Android-main2.jpg";
string filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "media", imageName);
FileInfo file = new FileInfo(filePath);
image1.Source = filePath;
if (file.Exists)
{
var htmlSource = new HtmlWebViewSource();
htmlSource.Html = $"<html><body>" +
$"<h1>Xamarin.Forms</h1>" +
$"<p>Welcome to WebView.</p>" +
$"<body style=\"width:100%\">"+
$"<img src=\"https://cdn-images-1.medium.com/fit/t/1600/480/1*xh4Z2pj_oCDbT7Y5CQ0geQ.jpeg\"/><br>" + //works
$"<img src=\"{filePath}\"/>" + // not working
$"</body></html>";
Browser.Source = htmlSource;
}
else
{
await tester.ImageDownload("https://www.technokrata.hu/uploads/2021/08/Android-main.jpg", filePath);
Browser.Source = "https://google.com";
}
}
谢谢
您可以使用 HtmlWebViewSource 设置源,以便它可以在代码隐藏中加载 html:
public EvaluateJavaScriptPage()
{
InitializeComponent();
_webView.Source = LoadHTMLFileFromResource();
}
HtmlWebViewSource LoadHTMLFileFromResource()
{
var source = new HtmlWebViewSource();
// Load the HTML file embedded as a resource in the .NET Standard library
var assembly = typeof(EvaluateJavaScriptPage).GetTypeInfo().Assembly;
var stream = assembly.GetManifestResourceStream("WebViewSample.index.html");
using (var reader = new StreamReader(stream))
{
source.Html = reader.ReadToEnd();
}
return source;
}
我有办法。我有两个问题:
- 我必须用 js、css 和图片
保存一个完整的网站
- 我有两个 Xaml 页面:一个用于保存网站(这是一个 API 页面),另一个用于显示保存网站
起初我保存了HTML代码。在此之后,我可以使用 HtmlWebViewSource
在 WebView 中加载保存的 HTML。当页面加载时,WebView 保存缓存(带有 js、css 和图像)。在此之后我可以关闭互联网并在 WebView 或其他 WebView 中加载 HTML(带有 js、csss 和图像)
这里是测试代码(我用这一行调用代码 WebCacheTest("https://pluszegy.com/kezolap/", htmlPath);
:
private void WebCacheTest(string url, string path)
{
if (!File.Exists(path))
SaveWebsite(url, path);
else
LoadOfflineWebsite(path);
}
async void SaveWebsite(string url, string path)
{
string html = await tester.HtmlTartalomLetöltése(url);
using (StreamWriter sr = File.CreateText(path))
{
sr.WriteLine(html);
var htmlSource = new HtmlWebViewSource();
htmlSource.Html = html;
Browser.Source = htmlSource;
}
}
void LoadOfflineWebsite(string path)
{
using (StreamReader sr = File.OpenText(path))
{
string html = sr.ReadToEnd();
var htmlSource = new HtmlWebViewSource();
htmlSource.Html = html;
Browser.Source = htmlSource;
}
}
我在 Xamarin 中有一个简单的 WebView。我在 Windows 上使用 VisualStudio 2022。 我下载了一张图片。图像是存在的。我可以将它加载到 ImageView 中。 我想用其他 html 代码在 WebView 中显示图像。
一个简单的测试代码:
private async void WebViewImagetest()
{
string imageName = "Android-main2.jpg";
string filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "media", imageName);
FileInfo file = new FileInfo(filePath);
image1.Source = filePath;
if (file.Exists)
{
var htmlSource = new HtmlWebViewSource();
htmlSource.Html = $"<html><body>" +
$"<h1>Xamarin.Forms</h1>" +
$"<p>Welcome to WebView.</p>" +
$"<body style=\"width:100%\">"+
$"<img src=\"https://cdn-images-1.medium.com/fit/t/1600/480/1*xh4Z2pj_oCDbT7Y5CQ0geQ.jpeg\"/><br>" + //works
$"<img src=\"{filePath}\"/>" + // not working
$"</body></html>";
Browser.Source = htmlSource;
}
else
{
await tester.ImageDownload("https://www.technokrata.hu/uploads/2021/08/Android-main.jpg", filePath);
Browser.Source = "https://google.com";
}
}
谢谢
您可以使用 HtmlWebViewSource 设置源,以便它可以在代码隐藏中加载 html:
public EvaluateJavaScriptPage()
{
InitializeComponent();
_webView.Source = LoadHTMLFileFromResource();
}
HtmlWebViewSource LoadHTMLFileFromResource()
{
var source = new HtmlWebViewSource();
// Load the HTML file embedded as a resource in the .NET Standard library
var assembly = typeof(EvaluateJavaScriptPage).GetTypeInfo().Assembly;
var stream = assembly.GetManifestResourceStream("WebViewSample.index.html");
using (var reader = new StreamReader(stream))
{
source.Html = reader.ReadToEnd();
}
return source;
}
我有办法。我有两个问题:
- 我必须用 js、css 和图片 保存一个完整的网站
- 我有两个 Xaml 页面:一个用于保存网站(这是一个 API 页面),另一个用于显示保存网站
起初我保存了HTML代码。在此之后,我可以使用 HtmlWebViewSource
在 WebView 中加载保存的 HTML。当页面加载时,WebView 保存缓存(带有 js、css 和图像)。在此之后我可以关闭互联网并在 WebView 或其他 WebView 中加载 HTML(带有 js、csss 和图像)
这里是测试代码(我用这一行调用代码 WebCacheTest("https://pluszegy.com/kezolap/", htmlPath);
:
private void WebCacheTest(string url, string path)
{
if (!File.Exists(path))
SaveWebsite(url, path);
else
LoadOfflineWebsite(path);
}
async void SaveWebsite(string url, string path)
{
string html = await tester.HtmlTartalomLetöltése(url);
using (StreamWriter sr = File.CreateText(path))
{
sr.WriteLine(html);
var htmlSource = new HtmlWebViewSource();
htmlSource.Html = html;
Browser.Source = htmlSource;
}
}
void LoadOfflineWebsite(string path)
{
using (StreamReader sr = File.OpenText(path))
{
string html = sr.ReadToEnd();
var htmlSource = new HtmlWebViewSource();
htmlSource.Html = html;
Browser.Source = htmlSource;
}
}