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

我有办法。我有两个问题:

  1. 我必须用 js、css 和图片
  2. 保存一个完整的网站
  3. 我有两个 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;
            }
        }