首页 > 解决方案 > 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- 添加、calshowx-apple-reminder和到LSApplicationQueriesSchemes cal。我

需要做什么才能让 WebView 打开此链接?

标签: swiftwebviewwkwebview

解决方案


在我们的例子中,为了实现这一点,我们添加了一个深度链接处理程序来将 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 事件。


推荐阅读