【发布时间】:2017-02-15 13:15:16
【问题描述】:
在 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 加载到网络视图中:
webView.loadHTMLString(htmlString, baseURL: libraryURL)
即使baseURL 设置正确,它也不会加载图像。
解决方案的想法
可能
WKWebView在解析相对路径时遇到问题,所以我的第一个想法是在 HTML 字符串中使用 绝对路径。
→ ❌ 不起作用。another SO post 的两个答案建议使用
loadFileURL(URL, allowingReadAccessTo: URL)
而不是loadHTMLString(...)适用于 iOS 9+。
→ ✅ 行得通。
但是,我不能使用解决方案 2,因为我的 HTML 文件是加密的,解密后的文件不能存储在磁盘上。
问题
有没有办法使用WKWebView's 加载本地资源,例如图片和样式
loadHTMLString(String, baseURL: URL?)
功能?还是 iOS 9+ 中的 bug?
(我简直不敢相信 Apple 提供并推荐使用无法从 HTML 字符串中加载任何本地 Web 内容的 Web 视图?!)
【问题讨论】:
-
我遇到了同样的问题。尝试使用“loadFileURL(URL,allowReadAccessTo:URL)”。它仍然不适合我。图像仍然没有为我加载。你是如何让它工作的?
-
你是如何让它工作的?
-
3 年零 8 个月后,我仍然遇到同样的问题
标签: ios css swift image wkwebview