在 WKwebView (SWIFT) 中加载本地资源以及 HTML 字符串?

Posted

技术标签:

【中文标题】在 WKwebView (SWIFT) 中加载本地资源以及 HTML 字符串?【英文标题】:Load local resources along with HTML string in WKwebView (SWIFT)? 【发布时间】:2020-08-13 10:06:02 【问题描述】:

我有一个 html 字符串(我从一个 api 响应中得到)。我还有一些 js 文件、css 文件、图像和应用程序包上的字体。

我需要将这些文件与 WKWebView 中的 html 字符串一起加载

the html string look like this

the app bundle look like this

My question similar to this :

提前致谢

【问题讨论】:

【参考方案1】:

在将资源文件和文件夹添加到包中时,单击“使用文件夹引用”选项而不是“创建组”。

【讨论】:

【参考方案2】:

像这样在下面创建一个html

<!DOCTYPE html>
<html>
    <head>
        <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no">
        <meta name="supported-color-schemes" content="light dark">
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <link rel="stylesheet" type="text/css" href="style.css">
    </head>
    
    <body>
        <div id="container">
            <div id="editor" contentEditable="true" placeholder="" class="placeholder"></div>
        </div>
        <script type="text/javascript" src="rich_editor.js"></script>
    </body>
</html>

在html中加载你的html和css文件,我用过rich_editor.jsstyle.css

像这样将创建的html加载到webview

webView.loadFileURL(documentsUrl, allowingReadAccessTo: documentsUrl.deletingLastPathComponent())

使用下面的函数插入从 API 获得的 Html 字符串

public func runJS(_ js: String, handler: ((String) -> Void)? = nil) 
        webView.evaluateJavaScript(js) (result, error) in
            if let error = error 
                print("WKWebViewJavascriptBridge Error: \(String(describing: error)) - JS: \(js)")
                handler?("")
                return
            
            
            guard let handler = handler else  return 
            if let resultBool = result as? Bool 
                handler(resultBool ? "true" : "false")
                return
            
            if let resultInt = result as? Int 
                handler("\(resultInt)")
                return
            
            if let resultStr = result as? String 
                handler(resultStr)
                return
            
            handler("") // no result
        
    

调用这个函数

runJS("RE.insertHTML('yourHtmlString')")

【讨论】:

我有多个css文件,如何加载多个css文件 是静态的还是动态的css文件? 那些是静态的,请检查问题中的图像。我更新了这个问题 加载我们已经为 style.css 导入的所有 css 文件 我找到了解决方案。不需要代码。在将资源文件和文件夹添加到捆绑包时单击 “使用文件夹引用” 选项而不是 “创建组”

以上是关于在 WKwebView (SWIFT) 中加载本地资源以及 HTML 字符串?的主要内容,如果未能解决你的问题,请参考以下文章

WKWebView 无法在 HTML 中加载本地资源

在 WKWebView 中加载本地文件在设备中不起作用

来自html字符串的iOS Swift 4图像未在WKWebView中加载

在 WKWebView (iOS, Swift) 中使用本地 Javascript 源加载本地 HTML

如何通过 WKWebVIew 或 JSC 在 iOS 应用程序中加载 WebAssembly

iOS:如何在 webview 或 wkwebview 中加载动画 webp 图像