ios - 是否可以保存 WKWebview 内容以供离线阅读?
问题描述
我需要保存 WKWebView 上加载的内容以供离线阅读,包括图像。然后,即使没有网络访问,用户也可以再次查看网页。
WKWebView 支持缓存吗?我该如何实施?
“用于离线查看的 UIWebView 网页缓存”中的答案是针对 UIWebview 而不是针对 WKWebView,因此它们是不同的。而且我也知道我们可以为 WKWebViewCache 启用应用程序缓存,但它将使用私有 API,这将被拒绝。
解决方案
//Two ways i know so far
//1st : after loading the page when user is online,get the html from WKWebView as follows :
webView.evaluateJavaScript("document.documentElement.outerHTML.toString()",
completionHandler: { (html: Any?, error: Error?) in
print(html)
})
//Second way is that inject script to get html from WKWebView as follows>
let script = WKUserScript(source: javascriptString, injectionTime: injectionTime, forMainFrameOnly: true)
userContentController.addUserScript(script)
self.webView.configuration.userContentController.addScriptMessageHandler(self, name: "didGetHTML")
func userContentController(userContentController: WKUserContentController,
didReceiveScriptMessage message: WKScriptMessage) { if message.name == "didGetHTML" {
if let html = message.body as? String {
print(html)
}
}
}
推荐阅读
- imagemagick - GraphicsMagick:命令失败:识别:没有此图像格式的解码委托`'@error/constitute.c/ReadImage/562
- html - Next.js导出静态html后,如何判断是通过Link跳转还是原生a标签跳转?
- php - 如何创建动态函数名?
- python-docx - 如何在 python docx 中为段落应用自定义(专有)字体?
- c++ - 如果项目中的两个文件具有相同的名称,如何避免与 QMake 的名称冲突
- reactjs - 我是 React 的新手,正在尝试使用 useState 制作表单。我收到一个错误:“TypeError:setValues 不是函数 handleInputChange”
- boolean - 如何使用布尔代数简化以下表达式?
- database - 我想向另一个人展示一个完整的 wordpress 页面
- node.js - NodeJS 使用凭证和 SSL 连接到 MQTT 服务器
- swift - 如何让编译器更喜欢我的函数而不是 Swift 通用函数?