首页 > 解决方案 > WKWebView 拦截本地文件请求

问题描述

我的 iOS 11+ 应用程序中有一个 WKWebView,我需要从本地内存中的 HTML 加载自定义 HTML。我可以通过使用webView.loadHTMLStringor来实现这一点webview.load(data),它工作正常。

此 HTML 引用了一些必需的 .js/.css/.png 文件。对于普通的 Web URL 请求,WKWebView 会即时执行此操作,加载丢失的文件。但在这种情况下,我需要拦截这些请求,并提供文件内容,因为其中一些需要动态生成。因此,我需要服务的 .css 文件等实际上并不作为本地文件存在。

我认为这只是实现协议decidePolicyFor方法的问题WKNavigationDelegate,但由于某种原因,本地子请求不会触发它,那么我该如何实现呢?

我还尝试将 HTML 保存为本地临时文件并使用 加载它webView.load(URLRequest),但这也不会触发委托。如果它是一个 Web URL,它会触发正常。

标签: iosswiftlocalwkwebviewwknavigationdelegate

解决方案


假设您渲染fullIosAppPath/page.html了具有类似<img src="folder/1.png">.
在这种情况下,您需要fullIosAppPath/folder/1.png在应用程序的文件夹中有一个文件。将在没有任何拦截的情况下WKWebView加载1.png- 它只会渲染图像。

因此,您可以在渲染 HTML 文件之前对其进行解析,并生成/加载所需的资源,例如1.png. 您可以使用Kanna等框架解析 HTML 文件,或者自己编写一些简单的解析器。


推荐阅读