当前位置:首页 > 实用技巧 >

webview初始化失败是什么意思(webview开好还是不开好)

来源:原点资讯(www.yd166.com)时间:2023-07-08 23:30:54作者:YD166手机阅读>>

上次说为了不想在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\n之类的东西,如果有就寄了。而使用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

栏目热文

webview中点击不了(webview打不开带参数的链接)

webview中点击不了(webview打不开带参数的链接)

作者:子非转发链接:https://juejin.im/post/5ce76ee4f265da1b8d15f700前言我...

2023-07-08 23:22:28查看全文 >>

webview安装失败怎么弄(webview安装失败 -22)

webview安装失败怎么弄(webview安装失败 -22)

为什么要学习Android与H5互调?微信,QQ空间等大量软件都内嵌了H5,不得不说是一种趋势。Android与H5互调...

2023-07-08 23:10:12查看全文 >>

webview重新安装(webview安装失败怎么弄)

webview重新安装(webview安装失败怎么弄)

本文内容步骤 1 - 安装具有 .NET 支持的 Visual Studio步骤 2 - 安装 Microsoft Ed...

2023-07-08 23:04:20查看全文 >>

webview不可用是怎么回事(webview开好还是不开好)

webview不可用是怎么回事(webview开好还是不开好)

Android 系统的 WebView 组件在近日的更新后,导致数十个甚至数百个依赖该组件的应用无法正常使用,用户打开之...

2023-07-08 23:09:34查看全文 >>

webview安装失败其他原因(不小心卸载了webview怎么办)

webview安装失败其他原因(不小心卸载了webview怎么办)

好惨,从凌晨开始,各种Webview的崩溃就在各大App中呈爆发式增长,不知道大家今天遇到了吗。在过去的几个小时里,大量...

2023-07-08 23:03:37查看全文 >>

怎么知道webview安装是否成功

怎么知道webview安装是否成功

WebView2控件应用详解系列博客  客户端程序(WinForm、WPF、Win32、WinUI)集成WebView控...

2023-07-08 23:15:46查看全文 >>

webview安装不上

webview安装不上

创作立场声明:并不是所有的用户都会出现本文中的问题,我只是告诉和我一样出现这个问题的值友们的解决方法,让你们少走弯路!可...

2023-07-08 23:35:46查看全文 >>

webview安装了怎么运行(webview入门教程)

webview安装了怎么运行(webview入门教程)

本文内容步骤 1 - 安装 Visual Studio 和 Windows 应用 SDK步骤 2 - 安装 Micros...

2023-07-08 23:03:08查看全文 >>

webview怎么找(webview地址怎么设置)

webview怎么找(webview地址怎么设置)

默认我们用Android SDK下包含的UiautomatorViewer.bat 工具查看app页面控件时只能查看原生...

2023-07-08 23:02:55查看全文 >>

webview不兼容怎么办

webview不兼容怎么办

WebView2控件应用详解系列博客 长青版WebView2运行时将作为Windows 11操作系统的一部分包含在内。但...

2023-07-08 23:03:55查看全文 >>

文档排行