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之UIWebView的使用 刚接触IOS开发1年多,现在对于 混合式 移动端开发越来越流行,因为开发成本上、...
    学无止境666阅读 45,933评论 5 53
  • WkWebView是IOS8中引入的新组件,苹果将UIWebViewDelegate 与 UIWebView 重构...
    i_belive阅读 5,078评论 1 25
  • 一.背景介绍 UIWebView自iOS2就有,iOS8出现了WKWebView,毫无疑问WKWebView将逐步...
    践行者阅读 13,302评论 2 16
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,539评论 0 13
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,161评论 1 32