如何解决在WKwebViewSWIFT中加载本地资源以及HTML字符串吗?
我有一个html字符串(我从api响应中获得)。另外我在应用程序捆绑包上有一些js文件,css文件,图像和字体。
我需要在WKWebView中将这些文件和html字符串一起加载
the html string look like this
预先感谢
解决方法
在将资源文件和文件夹添加到分发包中时,单击“使用文件夹引用”选项而不是“创建组”。
,在下面创建这样的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和css文件加载到html中,我用过rich_editor.js
和style.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')")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。