iOS WKWebView 加载本地图片报错"Not allowed to load local resource"

背景: 我们app里有一个webView编辑器。以前用的是UIWebView, 但是升级到iOS13后 UIWebView 已经被废弃了,而且UIWebView在iOS13的机器上很不稳定,很多crash,so决定改为WKWebView。

这里不介绍各种怎么换WKWebView了,百度,google 一堆文章,这里写下我遇到的一个问题。

首先我们的html是我们本地拼接起来的,加载的时候是

self.webView.loadHTMLString(htmlString, baseURL:nil)

然后调用什么的都没问题。但是如果插入图片,图片不显示。用safari联调的时候 发现JS报了个"Not allowed to load local resource"。也找过写JS的同事,也查过各种文章,都没有结果。也想过跨域问题,但是依然没有解决方案。 

后来偶然间发现了另一个加载的方法

@available(iOS 9.0, *)    

open func loadFileURL(_ URL: URL, allowingReadAccessTo readAccessURL: URL) -> WKNavigation? 

这个方法的注释是这样的(自行翻译)

 /** @abstract Navigates to the requested file URL on the filesystem.      @param URL The file URL to which to navigate.      @param readAccessURL The URL to allow read access to.      @discussion If readAccessURL references a single file, only that file may be loaded by WebKit.      If readAccessURL references a directory, files inside that file may be loaded by WebKit.      @result A new navigation for the given file URL.      */

然后联想到我们用到的

/** @abstract Sets the webpage contents and base URL.

     @param string The string to use as the contents of the webpage.

     @param baseURL A URL that is used to resolve relative URLs within the document.

     @result A new navigation.

     */

    open func loadHTMLString(_string:String, baseURL:URL?) ->WKNavigation?

emmmm 这个baseURL原来是有用的!!!传入可能要加载资源的路径,比如我们的图片是会保存到Caches目录下,这里可以把Caches目录的路径传入,这样这个webview就可以加载这个路径下的图片了...... 

总结:怎么说呢,有时候用一个东西的时候,别找个demo或者查几篇文章就直接用了,还是要翻一下文档的。可能一个困扰你的bug,就在文档中一句不显眼的可选变量里。

你可能感兴趣的:(iOS WKWebView 加载本地图片报错"Not allowed to load local resource")