使用“未知文件类型”的iPhone Chrome上的ICS文件下载失败

时间:2013-04-12 13:26:45

标签: iphone google-chrome mobile-safari icalendar mobile-chrome

我有一个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不喜欢的任何想法?

3 个答案:

答案 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%
}