我有一个PHP脚本可以自动为移动网络应用生成一个ics文件。
在我的Win7桌面上使用Chrome,ics文件下载得很好,而Outlook则喜欢它。
在我的iPhone上使用Safari,ics文件按预期打开日历应用程序,并允许我添加到日历。
在我的iPhone上使用Chrome,我收到“下载失败。Chrome无法下载此文件。错误102():未知文件类型。”
我发送这些标题:
header("Content-Type: text/Calendar; charset=utf-8");
header("Content-Disposition: inline; filename={$slug}.ics");
header("HTTP/1.0 200 OK", true, 200);
我的ics文件输出是:
BEGIN:VCALENDAR
VERSION:2.0
CALSCALE:GREGORIAN
PRODID:-//example.com//NONSGML blah blah//EN
METHOD:PUBLISH
BEGIN:VEVENT
UID:20130412T062148-527420343@example.com
DTSTAMP:20130412T062148
DTSTART:20130524T134500Z
DTEND:20130524T153000Z
LOCATION:
SUMMARY:This is the summary
DESCRIPTION:This is the description
STATUS:CONFIRMED
TRANS:OPAQUE
END:VEVENT
END:VCALENDAR
关于iPhone Chrome不喜欢的任何想法?
答案 0 :(得分:2)
它看起来像Chrome for iOS中的一个错误。见https://bugs.chromium.org/p/chromium/issues/detail?id=666211
答案 1 :(得分:1)
我看到的大多数例子都是小写的 http://www.w3.org/Protocols/rfc1341/4_Content-Type.html
尝试制作
内容类型:文字/日历
不是
内容类型:文字/日历
答案 2 :(得分:0)
使用webcal://your_link.ics
这应该可以解决您的问题。 Here's a preview of how it'll appear
这是jsbin,演示了基于用户代理的协议自动选择。
HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<a href="webcal://w3assets.angelbroking.com/wp-content/uploads/2020/07/ANGEL_BROKING_MONSOON_FESTIVAL.ics">Test webcal://</a>
<br><br>
<a href="https://w3assets.angelbroking.com/wp-content/uploads/2020/07/ANGEL_BROKING_MONSOON_FESTIVAL.ics">Test https://</a>
<br><br>
<a id="auto" href="https://w3assets.angelbroking.com/wp-content/uploads/2020/07/ANGEL_BROKING_MONSOON_FESTIVAL.ics">Auto (check JS)</a>
<br><br>
<textarea readonly id="ua"></textarea>
</body>
</html>
Javascript:
// Source: https://stackoverflow.com/a/9039885/3577736
function is_iOS() {
return [
'iPad Simulator',
'iPhone Simulator',
'iPod Simulator',
'iPad',
'iPhone',
'iPod'
].includes(navigator.platform)
// iPad on iOS 13 detection
|| (navigator.userAgent.includes("Mac") && "ontouchend" in document)
}
if(is_iOS()) {
document.getElementById('auto').href = document.getElementById('auto').href.replace(/https?:/, 'webcal:');
}
// Debugging
document.getElementById('ua').value = navigator.userAgent;
CSS:
textarea {
width: 100%
}