2025年 Safari 和 iOS版本检测新思路

2026-03-15
2025年 Safari 和 iOS版本检测新思路 关注 作者 关注 作者 关注 作者 关注 作者 2025/12/10 15:03

大家好,我是 Immerse,一名独立开发者、内容创作者、AGI 实践者。 pglucky88 pgslotgacor.app iyifanyfsp.app

关注公众号:沉浸式趣谈,获取最新文章(更多内容只在公众号更新)

个人网站:https://yaolifeng.com 也同步更新。 Caça-níqueis pgslotgacor.app 爱一帆yfsp.app pg pgslotgacor.app casinoonlineaustraliawww.baccarat.quest

转载请在文章开头注明出处和版权信息。 一帆yfsp.app

我会在这里分享关于编程独立开发AI干货开源个人思考等内容。

如果本文对您有所帮助,欢迎动动小手指一键三连(点赞评论转发),给我一些支持和鼓励,谢谢! 寻秦记爱壹帆yfsp.app 足球比分cpbl1.tw 爱壹帆免费版yfsp.app 海外华人视频网xiaobaotv.video 爱壹帆国际版yfsp.app

最近看到一篇文章,针对于 Safari 和 iOS 版本检测很不错,分享出来给大家。 pgslot pgslotgacor.app

之前都用 User-Agent 一把嗦,但文章提到检测结果不准确。 小寶影院xiaobaotv.video 足球比分clbp.bet 一帆视频yfsp.app

两个方式

  1. User-Agent
  2. 特性检测

User-Agent 检测

这个方法就是获取浏览器的 User-Agent,从里面提取版本信息。

但是有问题,这个结果不准确。 小宝影院在线视频xiaobaotv.video 肉视频jvid.asia 人人影视 renren.video onlinecasinoaustraliawww.onlinecasino10.com

Safari 的 UA 字符串里有两个版本号,一个是技术版本,一个是市场版本。很多脚本会把这俩搞混。 australianonlinecasinowww.baccarat.quest 小寶影院电影xiaobaotv.video

还有一点,从 macOS 11 开始,Safari 的 UA 里系统版本就不更新了,永远显示 10.15.7。

所以想从 UA 里准确获取版本?基本不可能。 爱壹帆在线yfsp.app

MDN 官方都说了,别依赖 UA 字符串做浏览器检测逻辑,这是个常见 bug 源头。

特性检测

苹果官方推荐: 特性检测。 skycrownonlinecasinowww.onlinecasino10.com JogodoTigrinho pgslotgacor.app

就是直接检查浏览器支不支持某个 API 或 CSS 特性。 电影爱壹帆yfsp.app

但它没法区分所有版本,因为很多特性在好几个版本里都有。 免费在线影院xiaobaotv.video

解决思路

把两种方法结合起来用, 主要靠特性检测,UA 检测作为补充。 Cassinos pgslotgacor.app 一帆yfsp.app

第一步:检测 WebKit 引擎

在 iOS 上,所有浏览器都必须用 WebKit,包括 Chrome、Firefox 这些。 newonlinecasinoaustraliawww.onlinecasino10.com

所以检测 WebKit 能帮我们缩小范围: 運彩cpbl1.tw onlinecasinocasinotrustinauwww.onlinecasino10.com 爱壹帆yfsp.app

// 桌面 Safari 和所有 iOS 浏览器
function isWebkit() {
    return 'GestureEvent' in window;
}

// 所有移动端 WebKit 浏览器
function isMobileWebKit() {
    return 'ongesturechange' in window;
}

// 只检测桌面 Safari
function isDesktopWebKit() {
    return typeof window !== 'undefined' && 'safari' in window && 'pushNotification' in window.safari;
}

第二步:检测特定 iOS 版本

去查 Safari 发布说明或 WebKit 的更新日志,找到某个版本新增的特性。 小宝影院xiaobaotv.video

比如我想检测 iOS 17.0,发现这个版本加入了 contain-intrinsic-size 支持。 爱壹帆电影yfsp.app ifun yfsp.app

那就检测这个特性: 人人视频renren.video

// iOS 17.0+ 返回 true
const isAtLeastiOS17 = CSS.supports('contain-intrinsic-size', '100px');

如果要检测具体的小版本,可以配合下一个版本的特性来排除。 华人影视xiaobaotv.video

比如 ManagedMediaSource 是在 iOS 17.1 才有的: aiyifan yfsp.app

const supportsManagedMediaSource = 'ManagedMediaSource' in window;

// 只匹配 iOS 17.0
function isOnlyiOS170() {
    return isAtLeastiOS17 && !supportsManagedMediaSource;
}

if (isMobileWebKit()) {
    if (isOnlyiOS170()) {
        // 这是 iOS 17.0
    }
}

第三步:真机测试

理论归理论,实际测试才是王道。 運彩cpbl.bet

踩坑: ifuntvyfsp.app ifvodyfsp.app

iOS 17.6 的发布说明里说支持 CSS 的 safe 关键字,用 @supports 检测也返回 true。 爱壹帆寻秦记yfsp.app cryptoonlinecasinowww.onlinecasino10.com jvidjvid.asia

结果真机上一跑,根本不生效。 小宝影院电影xiaobaotv.video onlinecasinosaustraliawww.baccarat.quest

这种情况下,只能换个思路,检测实际的渲染效果:

const isSafeKeywordSupported = () => {
    const container = document.createElement('div');
    const child = document.createElement('span');

    child.textContent = 'Evil Martians';

    container.style.display = 'flex';
    container.style.justifyContent = 'safe center';
    container.style.width = '5%';
    container.style.position = 'absolute';
    container.style.top = '-9999px';
    container.style.left = '-9999px';

    container.appendChild(child);
    document.body.appendChild(container);

    const containerRect = container.getBoundingClientRect();
    const childRect = child.getBoundingClientRect();
    const isCroppedOnLeft = childRect.left < containerRect.left;

    document.body.removeChild(container);
    return !isCroppedOnLeft;
};

通过检查元素的实际渲染位置,判断特性是不是真的生效了。 slot pgslotgacor.app iyftvyfsp.app

第四步:配合 UA 检测

有时候特性检测也不够用。 pgslotgacor pgslotgacor.app onlinecasinowww.onlinecasino10.com

比如要区分 iPad 和其他设备。 爱壹帆电影yfsp.app

iPad 的 UA 字符串跟 macOS 上的 Safari 一模一样。

但如果 UA 显示是 macOS,特性检测又显示是移动端 WebKit,那就能判断出这是 iPad: australianonlinecasinowww.onlinecasino10.com iyftvyfsp.app 爱壹帆影视yfsp.app xiaobao xiaobaotv.video 爱一番yfsp.app

// 检测 iPadOS
function isiPad() {
    return isDesktopWebKit() && isMobileWebKit();
}

几个关键点

WebKit 不等于 Safari,iOS 上所有浏览器都用 WebKit。 onlinecasinorealmoneywww.onlinecasino10.com 电影小宝影院xiaobaotv.video casinoonlineaustraliawww.baccarat.quest

主要用特性检测,UA 检测只是补充。 iyf yfsp.app 爱亦凡yfsp.app

多看 Safari 和 WebKit 的发布说明,但也别全信,因为有些变更根本没写进去。

真机测试不能省,有些 bug 只有在实际设备上才能发现。

有时候 @supports 会撒谎,浏览器说支持但实际不行,这时候得检查实际渲染效果。 slots pgslotgacor.app

写在最后

核心思路就是:特性检测为主,UA 检测为辅,真机测试验证。 onlinecasinocasinorelayforaustralianswww.onlinecasino10.com

参考资料

  • https://developer.apple.com/documentation/safari-release-notes
  • https://webkit.org/
  • https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Browser_detection_using_the_user_agent
00目录 0
    讨论 我来说一句 发布发表评论 发布0等 0 人为本文章充电 独立开发者 | https://yaolifeng.com 关注