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

移动端如何区分Brave与Safari?求JS/Angular检测方案

移动端区分Brave与Safari浏览器的解决方案

针对iOS端Brave被识别为Safari的问题,以下是几个可靠的检测方案,适用于JavaScript/Angular环境:

方案一:使用Brave官方提供的navigator.brave API

Brave浏览器内置了专属的navigator.brave对象,包含官方检测方法,这是不受UA修改影响的最准确方式:

async function detectBrave(): Promise<boolean> {
  if ('brave' in navigator) {
    try {
      const isBrave = await (navigator as any).brave.isBrave();
      return isBrave;
    } catch (err) {
      return false;
    }
  }
  return false;
}

// 在Angular组件中调用
ngOnInit() {
  detectBrave().then(isBrave => {
    console.log('是否为Brave浏览器:', isBrave);
    if (isBrave) {
      // 执行Brave专属逻辑
    } else {
      // 执行Safari或其他浏览器逻辑
    }
  });
}

该方法在iOS移动端Brave中可稳定生效,无需依赖UA信息。

方案二:检测Brave的Shields拦截特性

Brave默认开启Shields广告拦截,可通过尝试加载被普遍拦截的广告资源,判断加载结果间接检测:

function detectBraveByShields(): Promise<boolean> {
  return new Promise(resolve => {
    const adResource = new Image();
    adResource.src = 'https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js';
    
    adResource.onload = () => resolve(false);
    adResource.onerror = () => resolve(true);
    
    // 设置超时避免长时间等待
    setTimeout(() => resolve(false), 3000);
  });
}

// 在Angular组件中调用
ngOnInit() {
  detectBraveByShields().then(isBrave => {
    console.log('通过Shields检测是否为Brave:', isBrave);
  });
}

注意:若用户手动关闭Shields,该检测会失效,建议作为辅助验证方案。

方案三:UA+特性双重验证(兜底方案)

结合UA残留特征与官方API双重验证,提升检测覆盖度:

async function detectBraveCombined(): Promise<boolean> {
  const ua = window.navigator.userAgent;
  const hasBraveUA = ua.includes('Brave') || (ua.includes('Chrome') && !ua.includes('Safari'));
  const isBraveOfficial = await detectBrave();
  
  return hasBraveUA || isBraveOfficial;
}

替换原有代码建议

将你原有的Bowser检测和DuckDuckGo请求逻辑替换为上述方案(优先方案一),即可在iOS移动端准确区分Brave与Safari。

内容的提问来源于stack exchange,提问作者user21072016

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:45:48