gpt4 book ai didi

移动 safari (iOS) 中的 javascript 不会下载日历邀请

转载 作者:行者123 更新时间:2023-11-29 23:19:33 25 4
gpt4 key购买 nike

我有一个 js 客户端应用程序,我在其中创建了一个日历事件并想将其作为 ics 文件下载到客户端。这在桌面浏览器上运行良好,但 iOS 上的移动 safari(和移动 chrome)拒绝下载它。

这是我为该函数使用的代码:

let link = document.createElement('a')
// link.setAttribute('target', '_blank')
link.href = ics_string_from_indexedDB
link.download = 'Reminders.ics'
link.click()

当我使用上面的代码并单击我的链接时,移动版 safari 会提示“此网站正在尝试向您显示日历邀请。您要允许吗?”带有“忽略”和“允许”链接。但是单击“允许”链接会导致:

“Safari 无法下载此文件”。

我已经尝试按照其他地方的建议添加一个目标(并在上面注释掉),但这也不起作用,如果存在,点击我的链接根本没有任何作用。

我也曾尝试创建一个 blob,但 safari 拒绝以完全相同的方式下载它。

我也尝试过 base64 编码,但 safari 再次拒绝(并给出 404)

有谁知道允许 iOS safari(客户端)将此文件下载到日历的方法吗?

旁注:如果我改为从服务器发送 ical 流并设置各种 header ,我可以使它正常工作,但我想在客户端完成这一切,不明白为什么我需要服务器,所有存在正确的 ics 信息。

最佳答案

好吧,我自己解决了这个问题,这是我学到的:

Mobile Safari 对它认为有效的 .ics 文件非常挑剔,它根本不会识别它不喜欢的文件。即使它是有效的,即使桌面上的 iCal 和其他应用程序(以及桌面上的 Safari!) 也能很好地识别和导入这些 ics 文件。

我在我的服务器上使用了我以前使用的相同的 php 生成器,因为它似乎以 Mobile Safari 喜欢的格式生成文件。我没有时间详尽地测试它需要和不需要哪些字段,但如果我不得不猜测查看源代码,它可能与时区相关或者可能与 UID 的格式有关。如果我在这个项目之后有时间,我将尝试对此进行更具体的说明。

一旦我的格式一切正常,从我的本地 indexedDB 下载的 blob 现在就可以正常工作了:

let blob = new Blob([ics_string_from_indexedDB], { type: 'text/calendar' })
let link = document.createElement('a')
link.href = window.URL.createObjectURL(blob)
link.download = 'Reminders.ics'
link.click()

关于移动 safari (iOS) 中的 javascript 不会下载日历邀请,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51231882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com