我试图弄清楚我可以使用哪些 Javascript API 来实现对 Mobile Safari 的支持回到 iOS2。我还没有在任何地方找到一个列表来显示每个新版本的 iOS 附带的 Mobile Safari 版本。我正在寻找一个可以追溯到 iOS2 的完整列表。
谢谢!
[编辑:是的,我知道并且喜欢特征检测。但是,我有一组需要支持的目标浏览器,我只需要验证我提供的后备方案是否涵盖了我的目标受众,并且我不需要提供额外的后备方案,因为这些后备方案很麻烦)。]
由于这已经是 Google 上的热门话题,我们应该从这里开始列出。我会把这个答案变成一个社区维基。顺便说一句,我是从设备的用户代理字符串中提取这些的。浏览器版本取决于 iOS 版本,不取决于设备。但是,当手机不支持更高的 iOS 版本时,它会列出:
3.2.2 - Mobile Safari 4.0.4
4.3.3 - Mobile Safari 5.02 - iPhone 3g
5.0 - Mobile Safari 5.1
5.1 - Mobile Safari 5.1
6.0 - Mobile Safari 6.0 - iPhone 3gs
7.1 - Mobile Safari 7.1 - iPhone 4
8.3 - Mobile Safari 8.0
9.2.1 - Mobile Safari 9.0 - iPhone 4s
10.3.4 - Mobile Safari 10.0 - iPhone 5
11.2.5 - Mobile Safari 11.0
12.1.4 - Mobile Safari 12.0
12.4.4 - Mobile Safari 12.1 - iPhone 5S, 6
13.0 - Mobile Safari 13.0
[...] - [...]
15.2 - Mobile Safari 15.2
这个人的清单真的很有用:http://www.somegeekintn.com/blog/stuff/iosvers/
如果您需要更多信息,可以在 useragentstring.com 上解码 Safari 版本,例如:
http://www.useragentstring.com/Safari5.0.2_id_18120.php 解释说 Safari 版本 6533.18.5 被称为“Safari 5.0.2”
我也找不到完整的清单。到目前为止,我发现的最好的东西是来自 Apple 的一些 Safari 文档:
祝你好运!
[更新]
虽然这仍然不能回答问题,但它至少说明了 WebKit 何时在 2009 年 2 月添加了对 getBoundingClientRect()
的支持。
http://trac.webkit.org/changeset/40837
与其进行设备或操作系统检测,不如进行功能检测——它将提供更丰富的体验,并且您可以提供自定义代码来添加特定版本不支持的功能。这样,您将提供超出您所针对的特定设备的支持方式(并且通常最终会更容易,因为您不是为特定的用户代理分支代码,而是通过提供回填对旧 js 实现的支持有条件的前瞻性支持)。
比如最新版的桌面&移动版 Safari 不提供将上下文绑定到闭包的 .bind()
功能。这可以使用 Function.prototype.bind
检测和处理,如果它不存在,则提供为旧版浏览器提供功能的实现。使用像 http://www.modernizr.com/ 这样的库将大大有助于这项工作。
话虽如此,有一些特定的 DOM 事件与某些 iOS 版本相关:http://developer.apple.com/library/safari/navigation/#section=Libraries&topic=Safari%20DOM%20Additions%20for%20iOS
如果您正在查看特定的 API,caniuse.com 是一个很好的资源,可以帮助您了解 API 的支持程度。
祝你好运!
不定期副业成功案例分享