Apple’s recommendation:
In apps that run in iOS 8 and later,use the WKWebView class instead of using 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字符串内的绝对路径.
→❌不行.
> another SO post的两个答案建议使用
loadFileURL(URL,allowedReadAccessTo:URL)
而不是加载HTMLString(…)适用于iOS 9.
→✅工作.
但是,我无法使用解决方案2,因为我的HTML文件被加密,解密的文件不能存储在磁盘上.
题
有没有办法使用WKWebView加载本地资源,如图像和样式
loadHTMLString(String,baseURL: URL?)
功能?还是iOS 9中的bug?
(我只是不能相信Apple提供并建议使用无法从HTML字符串内部加载任何本地Web内容的网络视图?)