Published on

在macOS中如何用SwiftUI内嵌一个WebView来加载本地的一些html资源

Authors

最近开发我的 五笔助手 for macOS的时候,想把一个开源的跟打器玫枫跟打器嵌入到我的app中,这个app是用js+html编写的,整个界面设计得很漂亮,功能很比较完善。

但是在我集成的过程中,还是遇到了一些问题,现将整个过程记录下来:

macOS SwiftUI是否有原生的组件能支持我集成本地的web资源?

这是我找到的一些资料链接

他们都提到了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))
        }