Non-Webkit Opera 在某些特性上是非常具体的,所以通常通过 JavaScript如下方式检测到。
然而,Opera Next 几乎是谷歌 Chrome 的克隆版。
如何定位旧 Opera 而不是定位 Opera Next?
PS:我真的知道浏览器检测很烂,特征检测规则。但我希望用一个微小的浏览器检测补丁来更新这个正在运行的大型项目,而不是将大量代码重写为特征检测范式。
我找到了问题的根源。它在那个项目中处于不良浏览器检测中。如果您在问题中给出的链接中完全检测到 Opera,则不会检测到 Opera Next 是 Opera,因此不会执行 Old-Opera-Specific 代码,而是运行 Chrome-Specific-Code。
!!window.opera; // true in old Opera, false in Opera Next
navigator.userAgent.indexOf("Opera");// ------- the same --------
PS:幸运的是,我对我的项目进行了很多测试,所以我可以看出,在新的 Opera 中,事情的工作方式与在 Google Chrome 中完全一样。
一段导致问题的代码试图检测 Opera Old AND Opera Next:
/(Opera|OPR)/.test(navigator.userAgent)
结论: Opera 迁移做得非常好,你的项目应该没有任何问题。不要检测 Opera Next,只需将其视为通常的 Google Chrome。
更新:以前的 Opera 版本已从 caniuse.com 删除