首页 文章

将本 Map 像加载到WKWebView中

提问于
浏览
2

我正在尝试让WKWebView在 WKWebView 中显示本地下载的图像 . webview通常显示HTML,可以远程检索 . HTML的内容有时可能包含指向图像的远程链接 . 我的应用程序解析HTML并查找这些HTML标记,下载它引用的文件,然后用本地文件替换远程链接 .

通常来说,这不是很困难但是图像没有被显示,可能是由于webview的图像和本地HTML文件位于两个单独的目录(文档目录和app bundle目录中) . 我见过有人建议将图像的下载目的地移动到与HTML文件相同的目录,但这对我来说不是一个选项,因为我不想开始将用户下载的文件与本地资产混合在一起 .

什么是我最好的行动方案?

2 回答

  • 1

    好吧,我找到了一个解决方法 . 我现在不是在本地存储图像并在HTML文件中引用它们,而是将图像转换为Base64,然后将它们添加到HTML中 . 这不是理想的,但它完成了工作 . 如果有人设法找到实际的解决方案,我将打开这个问题 .

  • 1

    要在 WKWebView 中显示缓存的HTML引用缓存资源:

    • 对于HTML内容字符串中的每个资源,将其缓存到 NSTemporaryDirectory() 提供的目录中 . 所以像这样的图像标签:

    ...<img src='https://www.myimage.com/example_image.png'/>...

    应缓存并替换为以下内容:

    ...<img src='/private/var/mobile/Containers/Data/Application/527CF4FC-9319-4DFF-AB55-9E276890F5DC/tmp/example_image.png'/>...

    • 现在使用替换的资源URL缓存HTML内容字符串 . 它也必须缓存在 NSTemporaryDirectory() 提供的目录中 . 这里的一个区别是它必须使用 file:// 协议缓存(以后引用)作为使用 NSData 缓存字符串的限制(参见示例代码) .

    例如 file:///private/var/mobile/Containers/Data/Application/527CF4FC-9319-4DFF-AB55-9E276890F5DC/tmp/my_html_content_string.html

    有几点需要指出:

    • 您无法将HTML作为原始字符串加载( loadHTMLString:baseURL: ) .

    • 您无法使用 file:// 协议引用HTML字符串中的缓存资源 . 这可能适用于 UIWebView ,但不适用于 WKWebView .

    Objective-C的

    // To cache the HTML string:
    NSString *HTML = <HTML CONTENT WITH CACHED RESOURCES>;
    NSData *data = [HTML dataUsingEncoding: NSUTF8StringEncoding];
    [data writeToURL: cachedHTMLURL atomically: YES];
    
    // To load the store HTML file:
    [myWKWebView loadRequest: [NSURLRequest requestWithURL: cachedHTMLURL]]; // (file://.../tmp/my_html_content_string.html)
    

    迅速

    // To cache the HTML string:
    let HTML = <HTML CONTENT WITH CACHED RESOURCES>
    let data = HTML.data(using: String.Encoding.utf8)
    do {
        try data.write(to: cachedHTMLURL, options: .atomic)
    } catch {
        print(error)
    }
    
    // To load the store HTML file:
    myWKWebView.load(URLRequest(url: cachedHTMLURL)) // (file://.../tmp/my_html_content_string.html)
    

相关问题