【问题标题】:Reliable way to detect Chrome on Mac in PHP?在 PHP 中检测 Mac 上的 Chrome 的可靠方法?
【发布时间】:2012-07-14 04:11:21
【问题描述】:

正如标题所说,有没有一种可靠的方法来检测用户是否在使用 PHP 在 Mac 上使用 Chrome 访问我的页面?

我有一个错误,只有在 Mac 上使用 Chrome 时才会显示,在我解决它之前,我希望有一个弹出窗口来推荐用户使用不同的浏览器。

【问题讨论】:

  • 为什么不花时间实现这个浏览器弹出窗口来修复错误?
  • 因为我是一个 PHP 新手,我已经用尽了我的知识试图弄明白。这意味着我需要一些时间来修复它。因此,在我发现问题之前,合理的做法是警告用户。
  • 合乎逻辑的做法是向我们寻求帮助以解决真正的问题,而不是鼓励您的用户不要使用合理的浏览器/操作系统组合。
  • 尝试使用特征检测。如果出现问题,那么您很可能可以通过运行一个简短的测试来检测该问题。这应该比猜测用户可能使用的浏览器可靠得多。

标签: php browser-detection


【解决方案1】:

使用 $_SERVER['HTTP_USER_AGENT'] 查找用户的用户代理和一个函数来检查它是否在字符串中。

//The following will find out whether the user is using a Mac, obviously you can change this by echoing the user agent to find out what you need to search for.
$browser = strpos($_SERVER['HTTP_USER_AGENT'], "Chrome");
$os = strpos($_SERVER['HTTP_USER_AGENT'], "Macintosh; Intel Mac OS X");

if($browser !== false && $os !== false) {
  //do stuff if on a mac with Chrome
}

这适用于任何类型的 Mac OS X 软件和任何版本的 Chrome。如果您想进一步缩小结果范围,可以使用:

if($_SERVER['HTTP_USER_AGENT'] == "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11" ) {
  //do stuff here
}

【讨论】:

  • 那个浏览器标识字符串不可靠。
  • 我确信他在做什么 - 会好的。
  • 如果它不可靠,那是因为用户会改变它。如果他这样做了,他是自愿这样做的,所以他对它不起作用的事实负责。
  • 修改也可能因为代理在路上而发生。除此之外,它也可能是一个新版本,一个叉子,无论足迹略有不同。投入越来越多的时间去努力发现可以通过另一种方式更好地解决的问题是绝对没有意义的。
  • 您正在检测所有 mac 用户,而不是 mac + chrome 用户。
【解决方案2】:

如果您发布遇到问题的代码而不是创建一个 hacky 修复程序会更好。

但是,您可以使用$_SERVER['HTTP_USER_AGENT'] 来检查用户的浏览器/操作系统。

为了提供帮助,您可能希望 Mac 用户在 Chrome 上提供类似 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11 的信息。

注意

并不总是设置用户代理,因此请先使用isset 以避免出现通知。

【讨论】:

    【解决方案3】:

    我知道您正在寻找用于查找浏览器的 PHP 解决方案,但由于您使用特定浏览器最有可能遇到的问题是客户端问题,因此无需从服务器端检测它.

    所以这里有一个使用 javascript 的解决方案,如果你得到了你期望的匹配,你可以隐藏正文,或显示一个弹出窗口,或将它发送到你的服务器,设置一个 cookie,或者任何你认为合适的“修复”您的问题(尽管您应该考虑真正解决问题...)

    在这里寻找the source

    function that_is_called_on_load() {
        if (BrowserDetect.browser == "Chrome" && BrowserDetect.OS == "Mac") {
            alert("You are using mac, sorry.");
            window.location = "mac_chrome.php";
        }
    }
    

    这是一个非常“肮脏”的解决方案,它可能比服务器端的解决方案更准确/可靠。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-26
      • 2011-09-20
      • 2011-05-30
      • 1970-01-01
      • 2019-09-22
      • 1970-01-01
      • 2016-11-01
      • 1970-01-01
      相关资源
      最近更新 更多