swift 如何在WKWebView中处理日历和钱包事件

14ifxucb  于 9个月前  发布在  Swift
关注(0)|答案(2)|浏览(105)

我目前正在尝试在WKWebView中处理日历和钱包事件。事件由打开.ics或.passkey文件的按钮触发-在Safari中打开相应的窗口(保存日历事件/添加到钱包),但这在我的Web视图中不起作用。
我已经试过利用

func webView(_ webView: WKWebView,
             decidePolicyFor navigationAction: WKNavigationAction,
             decisionHandler: @escaping (WKNavigationActionPolicy) -> Swift.Void) {}

字符串
但没有成功。我得到的原始数据作为URL例如:
data:text/calendar; int sets = int-8; base64,QkVHSU46VkNBTEVOREFSDQpWRVJTSU9OOjIuMA0KQkVHSU46VkVWRU5UDQpEVFNUQVJUOjIwM jMxMjE1VDA3MDAWMFoNCkRURU5EOjIwMjMxMjE2VDE5MDAWMFoNClNVTU1BUlk6SUFBIE1vYmlsac@R5IDIwMjMNCkxPQ0FUSU9OOkhvY2hicsO8Y2tlbnN0cmHDn2UgNlwsIDgwMzMxIE3DvG 5jaGVuXCwgREUNCKVORDpWRVZFTlQNCkVORDpWQ0FMRU5EQVINCg ==
我该怎么处理?
我找不到太多关于这方面的文件。

vbopmzt1

vbopmzt11#

看起来你是想把信息从webview传递到你的原生Swift代码中。你有几个选择:
1.您可以使用以下信息执行URL重定向(看起来你已经在尝试了)。最好为这些重定向使用一个设置方案,比如“myAppName”。然后在你的决策处理程序中,(问题中的函数)检查方案,如果是“myAppName”,则返回decisionHandler(.cancel),因此URL未加载。(base64解码),然后是create a calendar event
1.您可以在客户端使用WKScriptMessageHandler来捕获从您的网站发送的消息。从这些消息中解析数据,然后将其用于create a calendar event。您可以在this blog post中找到有关此方法的更多信息。

liwlm1x9

liwlm1x92#

如果你有一个数据URL(如你的问题所示),那么你可以用下面的代码将其转换为字符串表示:

do {
    // Recreate the URL shown in the question
    let dataURL = URL(string: "data:text/calendar;charset=utf-8;base64,QkVHSU46VkNBTEVOREFSDQpWRVJTSU9OOjIuMA0KQkVHSU46VkVWRU5UDQpEVFNUQVJUOjIwMjMxMjE1VDA3MDAwMFoNCkRURU5EOjIwMjMxMjE2VDE5MDAwMFoNClNVTU1BUlk6SUFBIE1vYmlsaXR5IDIwMjMNCkxPQ0FUSU9OOkhvY2hicsO8Y2tlbnN0cmHDn2UgNlwsIDgwMzMxIE3DvG5jaGVuXCwgREUNCkVORDpWRVZFTlQNCkVORDpWQ0FMRU5EQVINCg==")!
    // Get the encoded data
    let data = try Data(contentsOf: dataURL)
    // Convert the data into a String
    if let str = String(data: data, encoding: .utf8) {
        print(str)
    } else {
        print("Bad string data")
    }
} catch {
    print("Bad data URL: \(error)")
}

字符串
此代码的输出为:

BEGIN:VCALENDAR
VERSION:2.0
BEGIN:VEVENT
DTSTART:20231215T070000Z
DTEND:20231216T190000Z
SUMMARY:IAA Mobility 2023
LOCATION:Hochbrückenstraße 6\, 80331 München\, DE
END:VEVENT
END:VCALENDAR


这个字符串代表一个标准的“ics”日历条目。你可以在你认为合适的时候使用它。

相关问题