webview加载本地html

君沐慈 2019-07-03 05:17:47
我想用webview加载一个本地html,是建的windows窗体应用工程。
一开始我试过直接文件夹指向加载。
string pp = "ms-appx-web:///D:\\SM-Media\\html\\704.html";
webView1.Navigate(pp);
结果如下图:

还试过另一种直接文件夹:
string hh = File.ReadAllText("F:\\work\\smmedia\\SM-Media\\html\\701.html");
webView1.NavigateToString(hh.Replace("<!DOCTYPE HTML>", ""));//这句我是担心应html里需要这个才可以展示结果没差异。
结果如下,黑屏且元素没加载出来,

我还了一个视频元素的html,结果如下。

但是我用这个静态页在服务端发布的http的方式加载却显示出来了。这让我百思不得其解。根本跟视频格式无关的感觉。
接着试过以下几种:窗口展示的都是白色无内容。如图1
string url = "ms-appdata:///local/html/demo2.html";
webView1.Navigate(new Uri(url));
webView1.Navigate(new Uri("ms-appx-web:///TEST/html/701.html", UriKind.Absolute));
而我用百度等地址加载却可以
webView1.Navigate(new Uri("https://www.baidu.com/")); --可正常显示
---------------
后来我又尝试把我要加载的html放到工程里。

工程结果如此,结果我试过无数种只要是非http/https的都不可以加载。
请问各位大神,求教。如何把本地的静态html给完整的加载出来。以下是我试过的各种:
// 加载指定的 ms-appx-web:/// 协议地址(Package 内的数据)
// webView1.IsJavaScriptEnabled = true;
// webView1.Navigate(new Uri("ms-appx-web:///TEST/html/701.html", UriKind.Absolute));
// webView1.Navigate(new Uri("ms-appx-web:///SM-Media/html/demo1.html", UriKind.Absolute));
// webView1.Navigate(new Uri("ms-appx-web:///html/demo2.html", UriKind.Absolute));
// webView1.Navigate(new Uri("ms-appx:///TEST/html/701.html", UriKind.RelativeOrAbsolute));
//webView1.Navigate(new Uri("ms-appx-web:///TEST/html/demo1.html", UriKind.Absolute));
//webView1.Navigate(new Uri("ms-appx-web:///html/demo2.html", UriKind.Absolute));
// webView1.Navigate(new Uri("ms-appdata:///TEST/html/701.html", UriKind.RelativeOrAbsolute));
// webView1.NavigateToString(hh.Replace("<!DOCTYPE HTML>", ""));
//webView1.NavigateToLocalStreamUri
//string url = "ms-appdata:///local/html/demo2.html";
//webView1.Navigate(new Uri(url));

#region 文件流读取
//var s = new FileStream(@"F:\work\smmedia\SM-Media\html\731.html", FileMode.Open);
//using (var read = new StreamReader(s))
//{
// webView1.NavigateToString(read.ReadToEnd());

//}
//s.Close();
#endregion
// Uri localUri = new Uri("ms-appx:///731.html");
//Uri localUri = new Uri("ms-appx:///html/731.html");
// Uri localUri = new Uri("ms-appx-web:///html/731.html");
//webView1.Navigate(new Uri("ms-appdata:///local/html/731.html"));
//webView1.Navigate(new Uri("https://www.baidu.com/"));
//Uri localUri = new Uri("ms-appdata:///html/731.html");
//webView1.Navigate(localUri);
// webView1.Navigate(new Uri(@"F:\work\smmedia\SM-Media\html\731.html"));
//Process.Start("microsoft-edge:D:\\SM-Media\\html\\7861.html");
//string pp = "ms-appx-web:///D:\\SM-Media\\html\\704.html";
//webView1.Navigate(pp);
//webView1.NavigateToString("<html>< head >< title >我是网页标题</ title ></ head >< body >我是网页内容,够简单了吧?<img ></img></ body ></ html > ");
...全文
466 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
君沐慈 2019-07-25
  • 打赏
  • 举报
回复
虽然后面没用到,不过还是谢谢。
qq_40929071 2019-07-04
  • 打赏
  • 举报
回复
换个思路试试吧,建立一个简单的静态html服务;

using System;
using System.IO;
using System.Linq;
using System.Net;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace LocalHtml
{
public partial class Form1 : Form
{
private const string Host = "http://127.0.0.1:4723/";
private readonly HttpListener _httpListener;
public Form1()
{
InitializeComponent();

_httpListener = new HttpListener();
_httpListener.Prefixes.Add(Host);
_httpListener.Start();

var wwwroot = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "wwwroot");
var response404 = File.ReadAllBytes(Path.Combine(wwwroot, "404.html"));
var response500 = File.ReadAllBytes(Path.Combine(wwwroot, "500.html"));

var allPath = Directory.GetFiles(wwwroot).ToDictionary(m => m.Replace(wwwroot, string.Empty).Replace('\\', '/').ToUpperInvariant(), m => m);

Task.Run(async () =>
{
while (true)
{
var httpContext = await _httpListener.GetContextAsync().ConfigureAwait(false);
var request = httpContext.Request;
var responseData = Array.Empty<byte>();
var statusCode = (int)HttpStatusCode.OK;

try
{
var path = request.Url.LocalPath?.ToUpperInvariant();
if (path != null && allPath.ContainsKey(path))
{
responseData = File.ReadAllBytes(allPath[path]);
}
else
{
statusCode = (int)HttpStatusCode.NotFound;
responseData = response404;
}
}
catch
{
statusCode = (int)HttpStatusCode.InternalServerError;
responseData = response500;
}
finally
{
try
{
httpContext.Response.ContentType = "text/html";
httpContext.Response.StatusCode = statusCode;
httpContext.Response.Close(responseData, true);
}
catch (Exception) { }
}
}
});

webBrowser1.Navigate(Path.Combine(Host, "index.html"));
}
}
}

stherix 2019-07-03
  • 打赏
  • 举报
回复
你还是用cef吧 轻松加载本地html页面
君沐慈 2019-07-03
  • 打赏
  • 举报
回复
自己顶下,有没人啊?

8,834

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 组件/控件开发
社区管理员
  • 组件/控件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧