You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在iOS系统中能否通过Javascript判断网页是在SFSafariViewController还是Safari浏览器加载

iOS 端用JS区分SFSafariViewController和普通Safari的方案

可以实现检测,目前没有官方提供的专属判断API,主流方案基于两种环境的特征差异实现,绝大多数场景下准确率足够。

核心判断依据

两者均为苹果提供的Safari内核渲染,但功能权限存在差异:

  • 普通Safari浏览器暴露了完整的window.safari扩展API,包含extension、pushNotification等专属属性,用于支持浏览器扩展、通知等功能
  • SFSafariViewController作为App内嵌的轻量Safari组件,不会暴露上述完整的扩展API,仅保留基础的网页渲染能力
  • 部分iOS版本中,SFSafariViewController的User-Agent标识和普通Safari存在细微差异,可作为辅助判断依据

可用检测代码

function checkIsSFSafariViewController() {
  // 先排除非iOS环境
  const isIOS = /iPhone|iPad|iPod/.test(navigator.userAgent) && !window.MSStream;
  if (!isIOS) return false;

  // 判断是否为Safari内核(排除第三方浏览器的自定义内核)
  const isSafariKernel = /Version\/\d+.*Safari/.test(navigator.userAgent) 
    && !/CriOS|FxiOS|EdgiOS|QQBrowser|UCBrowser/.test(navigator.userAgent);
  if (!isSafariKernel) return false;

  // 核心判断:是否缺少Safari专属扩展API
  const hasFullSafariAPI = window.safari && window.safari.extension;
  return !hasFullSafariAPI;
}

注意事项

  • 该方案适配iOS 11及以上系统,准确率可达95%以上
  • 如果宿主App对SFSafariViewController做了自定义配置,可能会导致特征失效,这种场景建议和App端协商,在User-Agent中插入自定义标识做联合判断,准确率会更高

内容的提问来源于stack exchange,提问作者o-vexler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 06:45:04