swift - Swift WebKit WebView 打开 ICS 日历事件
问题描述
在 WKWebView 中加载此链接会导致空白页面:https://www.cvs.com/addToCalendar?apptDate=04/21/2021&apptTime=04:15
在 Safari 应用程序中打开时,相同的 URL 会打开日历邀请弹出窗口。
这是返回的错误:
-canOpenURL:URL 失败:“data:text/calendar;charset=utf8,BEGIN:VCALENDAR%0AVERSION:2.0%0ABEGIN:VEVENT%0ADTSTART:20210421T081500Z%0ADTEND:20210421 ... CALENDAR” - 错误:“这个应用程序不是允许查询方案数据"
我试过的:
calendar
- 添加、calshow
、x-apple-reminder
和到LSApplicationQueriesSchemes cal
。我
需要做什么才能让 WebView 打开此链接?
解决方案
在我们的例子中,为了实现这一点,我们添加了一个深度链接处理程序来将 url 重定向到特定的操作。如
在 webview 中打开的 URL:
https://www.myapp.com/redirectabc?data=xxxx&contentType=xxxx&filename=xxx
在 webview 类中
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if let url = navigationAction.request.url {
if url.absoluteString.contains("redirectabc") {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
decisionHandler(.cancel)
return
}
}
}
在服务器端:
return response((string) $data, 200, [
'Content-Type' => $contentType,
'Content-Disposition' => "attachment; filename=\"".$filename."\"",
]);
这将使 webview 触发应用程序通过 safari 打开 url 并转到日历应用程序。
它有点混乱,但仍然能够保存 ICS 事件。
推荐阅读
- sql - 遍历数组并根据数组值删除表中的数据
- c# - 函数从 CoordinatesZ2.Text 返回字符串“null”,即使它包含值
- flutter - “字符串”类型不是“事件”类型的子类型
- java - 如何在java中对XML进行排序?
- pandas - 如何检查数据框中的值范围(域)?
- ruby-on-rails - ActionView::Template::Error 不能 base64 编码值
- r - 从 log2(TPM+1) 数据执行差异表达分析
- vue.js - 用于将属性添加到基于 mustache 的绑定的全局绑定表达式
- python - 大熊猫中的爆炸列表列
- android - 闪光灯在安卓设备上不起作用