google-chrome - php get_browser 现在将 Opera 读取为 Google Chrome?

标签 google-chrome browser opera browser-detection

我刚刚对我的代码进行了一些随机测试,并惊讶地发现 get_browser() 将 Opera 读取为 Google Chrome。

几个月前,get_browser() 在所有 5 个浏览器(chrome、ie、ff、opera、safari)上给了我正确的结果。

今天 Opera 显示了与 Google Chrome 相同的值。首先我认为 get_browser() 一定是问题所在,所以我尝试寻找替代方案。我看到了这个javascript alternative它的工作原理与 get_browser 类似,它也将 Opera 检测为 Google Chrome。

我对此进行了快速搜索,发现 Opera 的文章现在在其桌面浏览器中使用 Chromium。

这就是我的代码为 Opera 和 Google Chrome 提供相同值的原因吗?

我存储用户信息是为了获得更好的用户体验,但当我的用户被告知错误的信息时,情况看起来很糟糕。

关于如何在 Google Chrome 和 Opera 之间保持个性有什么想法吗?

我能想到的就是使用用户代理,但它可以被伪造。

最佳答案

Opera 现在使用 Chromium/Blink 作为其基础。为了解决兼容性问题,他们特意use Chrome's user-agent 。下面是 Opera 提供的 UA 字符串示例:

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36 OPR/15.0.1147.100

但是,Opera 和 Chrome 的区别仍然是可能的,因为 Opera 将其版本附加到用户代理,如上所示。

如果您想继续使用 PHP 的 get_browser() 函数,您应该等待 PHP 的后续版本原生实现 Opera 检测。但是,您也可以编写一个函数来完成这项工作。事实上,get_browser() 的工作原理是解码 HTTP 请求 header 的用户代理字段。

关于google-chrome - php get_browser 现在将 Opera 读取为 Google Chrome?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18062380/

相关文章:

javascript - 为什么每次我在 Chrome 中更改日期字段中的年份时都会触发 onChange 事件?

css - 是否有一种 0 宽度的方法来防止 float div 折叠

javascript - 单击浏览器的后退按钮后,Opera 浏览器不会在页面上触发 JS 或服务器端代码 (JSP)

icons - Opera 的 SpeedDial View 仍然可以管理吗?

javascript - 无法在 Chrome 中捕获 Chrome window.location.href

javascript - HTML5 文件系统 API

javascript - 如何强制浏览器再次解析MathML内容?

css - 什么 css 导致我奇怪的自动换行?

javascript - 使用 jQuery 检测 Opera 的正确方法是什么?

android - 如何在 Android 浏览器地址栏中启用 mDNS 支持