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

如何用PHP/HTML判断用户是否使用Web应用,避免重复推送广告?

判断用户是网页浏览器还是Web应用(PHP/HTML方案)

嘿,这个问题我刚好研究过!要判断用户是在普通浏览器里访问,还是在用你的Web应用(不管是PWA独立运行还是原生封装的WebView),确实有可行的方案,分前端(HTML/JS)和后端(PHP)两种情况给你说说:

一、前端(HTML+JavaScript)方案:最可靠的检测方式

前端能直接获取浏览器的运行环境信息,所以这是最推荐的方案,尤其是针对PWA独立运行的场景。

核心思路

Web应用通常会有几个独特的标识:

  • PWA添加到主屏幕后独立运行时,浏览器会提供专属的媒体查询或API
  • 原生App封装的WebView,其User-Agent里会带有特定关键词

代码示例

function isUserUsingWebApp() {
  // 检测iOS Safari的PWA独立运行模式
  if (window.navigator.standalone) {
    return true;
  }
  // 检测标准PWA的独立运行模式(适配Chrome、Firefox等)
  if (window.matchMedia('(display-mode: standalone)').matches) {
    return true;
  }
  // 检测原生WebView(比如Android WebView、iOS WKWebView,以及微信/支付宝等内置浏览器)
  const userAgent = navigator.userAgent.toLowerCase();
  return userAgent.includes('webview') || 
         userAgent.includes('wv') || 
         (userAgent.includes('iphone') && !userAgent.includes('safari'));
}

// 实际使用:如果用户没在Web应用里,就显示推广广告
window.addEventListener('load', function() {
  if (!isUserUsingWebApp()) {
    const promoBanner = document.createElement('div');
    promoBanner.textContent = "✨ 试试我们的专属Web应用,体验更流畅!";
    promoBanner.style.cssText = "padding:1rem; background:#f5f5f5; border-bottom:1px solid #ddd; text-align:center;";
    document.body.prepend(promoBanner);
  }
});

说明

  • navigator.standalone是iOS Safari独有的属性,当用户把PWA添加到主屏幕并打开时,这个值为true
  • (display-mode: standalone)是W3C标准的媒体查询,支持Chrome、Edge、Firefox等主流浏览器的PWA独立模式
  • WebView的User-Agent通常会包含webview或wv字样;iOS上的WebView不会在User-Agent里带上safari,可以用这个特征区分

二、后端(PHP)方案:基于User-Agent的初步判断

PHP只能通过请求头里的User-Agent来判断,局限性比较大(比如无法检测PWA独立运行模式,因为此时User-Agent和普通浏览器几乎一致),但可以做初步的过滤。

代码示例

function isUserUsingWebApp($userAgent) {
  $userAgent = strtolower($userAgent);
  
  // 检测WebView专属标识
  if (str_contains($userAgent, 'webview') || str_contains($userAgent, 'wv')) {
    return true;
  }
  // 检测iOS上非Safari的情况(大概率是WebView)
  if (str_contains($userAgent, 'iphone') && !str_contains($userAgent, 'safari')) {
    return true;
  }
  
  // 注意:PWA独立模式的User-Agent和普通浏览器完全一致,PHP无法检测!
  return false;
}

// 实际使用
$userAgent = $_SERVER['HTTP_USER_AGENT'] ?? '';
if (!isUserUsingWebApp($userAgent)) {
  echo '<div style="padding:1rem; background:#f5f5f5; border-bottom:1px solid #ddd; text-align:center;">✨ 试试我们的专属Web应用,体验更流畅!</div>';
}

注意事项

  1. User-Agent可伪造:这种检测方式不是100%精准,但对于绝大多数普通用户场景完全够用
  2. 优先用前端方案:PHP无法检测PWA独立运行模式,所以如果你的Web应用包含PWA,一定要结合前端JS来判断
  3. 灵活调整规则:如果需要排除特定的内置浏览器(比如微信),可以在User-Agent判断里添加对应的关键词(比如micromessenger)

内容的提问来源于stack exchange,提问作者Marianne Sjöberg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:35:10