ios - WKWebView 拦截本地文件请求
问题描述
我的 iOS 11+ 应用程序中有一个 WKWebView,我需要从本地内存中的 HTML 加载自定义 HTML。我可以通过使用webView.loadHTMLString
or来实现这一点webview.load(data)
,它工作正常。
此 HTML 引用了一些必需的 .js/.css/.png 文件。对于普通的 Web URL 请求,WKWebView 会即时执行此操作,加载丢失的文件。但在这种情况下,我需要拦截这些请求,并提供文件内容,因为其中一些需要动态生成。因此,我需要服务的 .css 文件等实际上并不作为本地文件存在。
我认为这只是实现协议decidePolicyFor
方法的问题WKNavigationDelegate
,但由于某种原因,本地子请求不会触发它,那么我该如何实现呢?
我还尝试将 HTML 保存为本地临时文件并使用 加载它webView.load(URLRequest)
,但这也不会触发委托。如果它是一个 Web URL,它会触发正常。
解决方案
假设您渲染fullIosAppPath/page.html
了具有类似<img src="folder/1.png">
.
在这种情况下,您需要fullIosAppPath/folder/1.png
在应用程序的文件夹中有一个文件。将在没有任何拦截的情况下WKWebView
加载1.png
- 它只会渲染图像。
因此,您可以在渲染 HTML 文件之前对其进行解析,并生成/加载所需的资源,例如1.png
. 您可以使用Kanna等框架解析 HTML 文件,或者自己编写一些简单的解析器。
推荐阅读
- angular - ag-grid 锁定组扩展
- sapui5 - sap.uxap.ObjectPageLayout:如何在加载时设置默认部分页面?
- salesforce - 查找 Salesforce 全局值集的 ID
- php - 如何在 MAMP PRO 中降级 phpMyAdmin 版本
- reporting-services - SSRS 如何以 MM/YY 格式对日期进行排序?
- excel - 试图从 VBA 自定义函数所在的单元格中删除单元格内容
- python - 用于匹配电子邮件地址的正则表达式
- php - 为什么不通过xpath php显示属性html
- c# - Asp .net 不在浏览器上写入 cookie
- java - Reactor REST Mono 返回 ScanAvailable: true