- Published on
在macOS中如何用SwiftUI内嵌一个WebView来加载本地的一些html资源
- Authors
- Name
- sakuragi
最近开发我的 五笔助手 for macOS
的时候,想把一个开源的跟打器玫枫跟打器嵌入到我的app中,这个app是用js+html编写的,整个界面设计得很漂亮,功能很比较完善。
但是在我集成的过程中,还是遇到了一些问题,现将整个过程记录下来:
macOS SwiftUI是否有原生的组件能支持我集成本地的web资源?
这是我找到的一些资料链接
东坡肘子(最近很喜欢的一个开发者,写了很多的Swift/SwiftUI相关的文章,向他学习和致敬): 在 SwiftUI 视图中打开 URL 的若干方法
Paul Hudson(非常出名的一个iOS技术分享博主,对我影响很大):
How to open web links in Safari
他们都提到了SwiftUI中的Link组件,其中东坡肘子的文章还提到通过环境值openURL提供OpenURLAction处理代码的方式来实现自定义打开链接的行为,但是,这些都不符合我们的需求,我们是想用SwiftUI来内嵌一个webview,在webview中加载放在Bundle中的资源
能否用WKWebview呢?
https://github.com/kylehickinson/SwiftUI-WebView
采用这种方案,能加载首页的一些资源,但是效果没对
分析原因是我将html的文件夹之间互相访问的路径给改变了,导致在访问一些js,css的资源的时候报错了。 我们可以把这些资源打成一个bundle文件,来统一管理和保存,同时又不破坏其目录结构,从而不至于影响到他们之间的互相访问
代码可以这样写
if let url = Bundle.main.url(forResource: "typepadBundle", withExtension: "bundle"),
let bundle = Bundle(url: url),
let path = bundle.path(forResource: "index", ofType: "html") {
let url = URL(filePath: path)
self.webViewStore.webView.load(URLRequest(url: url))
}