。NET6上的WebView2体验
上次说为了不想在web端登录博客园,我想着还是继续使用MarkWord编写博客,不过在使用的过程中,如果markdown文件的目录中有中文的话,Markdown预览就不能够显示粘贴的图片了,原因是之前.NET Framework的WeBrowser库太老了,应该升级一下。
替换WebBrowser的方案很多,在Stackoverflow上有人推荐使用WebView2,我就直接用了,也没有多想,实际上使用的问题还是不少的,简单记录一下。WebView2#
这个东西是微软推出基于Edge或者说是基于chromium内核的浏览器组件,可以提供现代的浏览器体验,用于集成到.NET程序中,实现.NET对web的访问与调用,或者反过来也行。这个东西感觉是CefSharp的有利竞争者呀,虽然我也没咋用过CefSharp。WebBrowser->WebView2#
迁移的第一步是引用的替换,WebBrowser在System.Windows.Forms.WebBrowser命名空间,如果使用WPF的话,需要使用WindowsFormsHost,这个就体验不是那么好了,WPF下,有Microsoft.Web.WebView2.Wpf,可以提供给WPF原生的访问,赞一个。访问DOM#
然后就是出现的错误了,最难受的是,WebView2不提供对DOM的访问权限!,WebBrowser可以直接通过Document来访问DOM节点,而WebView2只能设置访问的Uri信息,然后控制导航与调用js。
为了实现动态的控制预览框的内容,访问DOM是必须的,如果我动态的渲染一个文件,然后随时再构造Uri,再传递到WebView2中,那太啰嗦了。由于这个东西可以直接调用JS,那么我们换一个思路:通过WebView2调用JS,然后使用Js操作DOM,曲线实现控制DOM的目标。废话不多说,直接上代码。if (winWebDoc.CoreWebView2 == null) return; var script = "document.body.innerHTML = "" + Markdown.ToHtml(MarkValue, pipeline).Trim() + """; winWebDoc.ExecuteScriptAsync(script);
之前我也尝试过document.write的方法,发现有点问题,还是不能正常识别。
WebView2除了直接在传递js的函数体以外,还可以调用页面中的顶级JS函数,具体使用方法参见后面的参考文献或者园子里面的这篇文章,反正我这么使用之后中文目录的问题就解决了,不过右侧渲染如果有回车换行的话,就经常会卡死,好像是引擎就崩溃了。替换默认换行#
经过debug,发现WebView2在运行的过程中,需要渲染的html内,标签之间不能有r 之类的东西,如果有就寄了。而使用CommonMark.CommonMarkConverter.Convert方法转换的markdown文件都会有这个东西...
这个库时间也比较久远了,经过简单研究,我换成了Markdig这个库,二者兼容,而且Markdig还提供了更多定制的地方,我这里将所有的换行,替换为空字符。 private MarkdownPipeline pipeline = new MarkdownPipelineBuilder() .ConfigureNewLine("") .Build();
这样,换行就没啥问题了,但是在初次使用时,会出现WebView2无法正常渲染的问题。WebView2初始化#
WebView2的初始化和其他的库有点不同,它提供了一个EnsureCoreWebView2Async的方法,对它的操作,请一定等这个方法返回。可以使用await,也可以和我一样,使用TPL。 winWebDoc.EnsureCoreWebView2Async() .ContinueWith(t => { Dispatcher.Invoke(() => { winWebDoc.Source = new Uri(System.IO.Path.Combine(Environment.CurrentDirectory, "index.html")); }); });
注意我这里使用加载了一个本地的模板HTML文件,访问本地文件的时候,需要使用Uri的方式访问。结语#
经过了一番折腾,终于是能够继续使用MarkWord写博客了,虽然我更换了主题之后,滚动不是很利索了,另外渲染代码换行好像还有点问题,不过好歹能用了,以后再折腾吧。
作者:波多尔斯基
出处:https://www.cnblogs.com/podolski/p/16199151.html
汽车空调是如何制冷的?我们开车常用的汽车空调是如何进行制冷的?制冷都是由那些零件组成,每个零件的作用是什么?汽车空调系统制冷一般由压缩机总成冷凝器及储液罐总成HVAC总成(里面含有蒸发器和膨胀阀)和空调
无线扫地机TELEC认证如何办理?无线扫地机TELEC认证流程有哪些?无线扫地机是智能家用电器的一种,能凭借一定的人工智能,自动在房间内完成地板清理工作。一般采用刷扫和真空方式,将地面杂物先吸纳进入自身的垃圾收纳盒
蓝牙耳机CE认证怎么办理?CE认证的类型有很多种,很多人做CE认证时都不清楚自己的产品符合哪一种CE认证类型,任何进入欧洲市场的产品都需要做CE认证,而CE认证根据电子产品的不同而分不同的形式。出口欧盟的无
搭载iMMD混动系统全新思域HATCHBACK混动版曝光,外观有变化日前,外媒曝光了一组全新思域HATCHBACK混动版路试谍照。据悉,新车将针对外观有所调涨,并搭载iMMD混动系统。相比思域三厢版车型,全新思域HATCHBACK混动版车身更为紧凑
豪华智能旗舰领克09正式上市哪一款最具性价比?日前,领克品牌五周年庆典暨豪华智能旗舰SUV领克09上市发布会在上海盛大举办。此次,领克09共推出MHEV和PHEV两种动力版本,UltraHaloPro三款车型,其中,MHEV版
2022款大众途观L到店搭载2。0T动力,配置更为丰富,你不心动吗作为上汽大众的当家花旦,途观系列创造了国内SUV销量的多项纪录。途观L车型的上市,不但配置更为丰富,而且进一步满足了当下消费者对于车内大空间的需求。目前,据编者了解到,北京地区20
红旗LS7外观实拍车长或超过5。5米,定位旗舰SUV日前,网络上曝光了一组红旗LS7的实车外观实拍图。据悉,新车外观设计方正扎实,车窗配有深色车膜。从悬挂的试字号牌来看,该车仍处在测试环节中。新车前脸采用了面积硕大的进气格栅设计,车
只需要一招就能让win10字体变得更好看我们都知道,Windows系统的字体不如Mac系统的字体好看,没有那么精致。Windows系统只有在高分屏下,4K分辨率下,字体才会好看,圆润。但是没有4K显示器的伙伴们,其实也可
既能充电又能听歌的真无线耳机南卡N2S前言南卡可以说是国内比较知名的数码外设厂商,尤其是旗下的蓝牙耳机系列更是佼佼者。之前也用过其耳机产品还是挺不错的,而这次体验的新产品南卡N2S,是N2的升级产品,相对于一代产品,本
燕飞利仕I600TWS真无线蓝牙耳机重量小长续航佩戴爽音质强前言对音响品牌不是特别有研究的消费者对燕飞利仕这个品牌可能比较陌生,但是如果你关注汽车音响方面的话,相信对这个品牌就不会再陌生了,因为很多汽车上配置的音响都是燕飞利仕。燕飞利仕是美
看电影有感五一期间,看电影你的婚礼和扫黑。你的婚礼开始时觉得一般,后来到男主人公在事业受挫埋怨时,觉得挺实在。年轻人初入社会,遇到挫折是正常,其实再咬咬牙,也就过去了,只是当事人的苦只有自己