在 iOS 8 及更高版本中运行的应用程序中,使用 WKWebView 类而不是使用 UIWebView。
因此,我用闪亮的新 WKWebView
替换了我的旧 UIWebView
。但我认为是一个简单的练习(简单地交换类并替换委托方法)结果却是一团糟。
问题
当我使用加载 HTML 字符串时
loadHTMLString(String, baseURL: URL?)
Web 视图加载并呈现纯 HTML,但 它不加载在 htmlString
中引用的任何图像或 CSS 文件。
这只发生 在真实设备上!
在 Simultor 中,所有引用的资源都已正确加载。
例子
我在视图控制器类中定义了一个简单的 htmlString
:
let imageName = "image.png"
let libraryURL: URL // The default Library URL
var htmlString: String {
return "<html> ... <img src=\"\(imageName)\" /> ... </html>"
// "..." represents more valid HTML code incl. header and body tags
}
该图像存储在根库文件夹中,因此其 URL 为:
let imageURL = libraryURL.appendingPathComponent(imageName)
现在我将 htmlString
加载到 web 视图中:
webView.loadHTMLString(htmlString, baseURL: libraryURL)
即使 baseURL
设置正确,它也不会加载图像。
解决方案的想法
也许
WKWebView
在解析相对路径时有问题,所以我的第一个想法是在 HTML 字符串中使用 绝对路径。→ ❌ 不起作用。
另一个SO帖子的 两个答案建议使用
loadFileURL(URL, allowingReadAccessTo: URL)
而不是 loadHTMLString(...)
适用于 iOS 9+。
→ ✅ 行得通。
但是,我不能使用解决方案 2,因为我的 HTML 文件是加密的,并且解密后的文件不能存储在磁盘上。
问题
有没有办法使用 WKWebView
加载本地资源,如图像和样式
loadHTMLString(String, baseURL: URL?)
功能?或者仍然是 iOS 9+ 中的错误?
(我简直不敢相信 Apple 提供并建议使用无法从 HTML 字符串中加载任何本地 Web 内容的 Web 视图?!)
原文由 Mischa 发布,翻译遵循 CC BY-SA 4.0 许可协议
我花了一段时间才弄清楚这一点,但基于这个答案,我得到了它的工作:
https://stackoverflow.com/a/73519282/5868066
尝试这个: