swing如何加载webview

swing如何加载webview,第1张

1 JEditorPane这个组件是swing工具包中自带的,但是它能解析的html及css非常有限,N年没更新了,很多现在的网页,加载会出问题。

2 DJ Native Swing这个效果也不错,我捣鼓了半天,就是使用起来很麻烦,它的很多功能不符合我的预期,没办法在netbeans中拖拽使用

3 JxBrowser这个浏览器组件非常好用,但它是商业版的,网上已有破解方法。缺点就是,这个组件长时间不 *** 作,会莫名其妙地卡死,偶尔还会报各种channel异常错误,我始终没解决这个问题,而且所依赖的jar太大,大概100多M。

Swing与Javafx的对比

在Swing图形工具包中,JFrame是一个顶层容器,JPanel是一个中间容器,JPanel上面可以放置各种Button按钮、Label标签等图形控件。有一个很形象的比喻,JFrame是一张桌子,各个组件是一盘又一盘的菜,而JPanel就是一个托盘,装了选好的菜品(组件)后放到JFrame桌子上。一个JFrame界面上可以有多个JPanel用来划分不同的区域。

在Javafx中,顶级容器是舞台Stage,也就是软件的界面窗口;Scene场景为中间容器,各种组件Button、Label成为Node节点,Node节点必须放在Scene场景中。

Swing添加Javafx的webview组件

Netbeans没法拖拽JFXPanel,那么我们可以这样,在JFrame上先放一个JPanel,然后手动敲代码在JPanel上添加一个JFXPanel,JFXPanel上放一个scene场景,在其上面放一个Javafx的webview组件,具体看如下 *** 作:

JFrame-->JPanel-->JFXPanel-->scene-->webview,需要手写的代码量很少。具体 *** 作如下:

1. netbeans拖拽画出一个JFrame窗口。

2. 在JFrame图形界面上,想要实现浏览器组件的位置放一个JPanel。

0d2948bc3de3cdeb518b92f4e3313ed2.png

3. 手动敲代码,在JPanel上面放置一个JFXpanel,然后载入一个场景。

4. 手动敲代码,在JFXPanel上放置一个webview控件。

613f757c51996c6beff242858adce564.png

如下图所示,浏览器稳定运行。

通常来说,选择Web应用还是原生应用来开发是一种在通用性和本地权限之前的权衡。WebApp兼容的范围很广,而且Web前端代码基于浏览器天生跨平台,而且前端框架多好开发。而原生应用有很大本地权限,可以进行各种文件和 *** 作系统接口的调用。WebView可以结合这两者的优点进行开发。

WebView2允许你在本地App里面嵌入web相关的技术(例如HTML,CSS和JavaScript)。WebView2控件使用微软的Edge作为渲染引擎,你可以嵌入一部分或者整个App都用WebView来做。微软还有一个类似的出得更早框架是CEFSharp,这个但是下载依赖要稍繁琐,具体可以看我这篇文章。

使用WebView2的优势

可以运用Web的生态和技术库。Web前端的各种库,工具都可以直接套用来开发界面。

开发得更

Windows 7,8,10都支持。

本地应用API。可以调用完整的本地API。

代码复用。代码库中的前端代码可以跨平台重用。

微软支持。这个插件这是有微软持续更新的GA版本,支持.NET FrameWork 4.7.2以后的版本、.NET Core、Win32 C/C++,.NET 5,.NET 6,WinUI 2.0/3.0。

带内核更新的部署。依赖于定期更新和修复漏洞的Choromium内核。

固定版本内核部署。可以选一个固定的Choromium版本部署WebView2。

采用增量。可以逐步将网页逐个添加或替换到你的应用中。

使用WebView的步骤

1.首先安装WebView2 运行时或者Microsoft Edge Insider(安装Beta版最稳定):

https://developer.microsoft.com/zh-cn/microsoft-edge/webview2/#download-section

https://www.microsoftedgeinsider.com/zh-cn/download

2.创建一个WinForm项目(Win32,WinUI,WPF,UWP应用等步骤类似),然后安装WebView2插件

安装WebView2插件

3.安装好后工具箱会多出一个WebView2控件,把控件拖到Form中使用即可

工具箱的WebView2控件

4.Source属性设置初始的页面,然后运行

Source属性

运行效果

如果运行出来是一个白框应该是运行时装错了,检查下是不是和 *** 作系统同一个位数,如果装的是浏览器内核看下是不是Beta版。如果是一个灰框(就像是运行了控件不存在一样)暂时还没找到解决方法,可以按照相同步骤换一台电脑 *** 作看是不是 *** 作步骤的问题。

有时我们用 webView 展示 html 是需要自定义头部视图与底部视图,原生没有像 tableView 那样提供相应的方法。我们只能自己写了。

设置 contentInset,而不是 contentSize。

配置区头:

设置 contentSize 的时机是在 - (void)webViewDidFinishLoad:(UIWebView *)webView 网页加载完成之后,此时 html 网页是和头部视图重叠在一起,需要 1s 左右时间更新视图,体验不好。而使用 contentInset 不会发生这种现象。

在 webView 加载完成后,获取 UIWebBrowserView 的 size 并重新设置 webView 的 contentSize。

UIWebBrowserView 是负责展示 html 内容的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11265292.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存