【问题标题】:distinguish between chrome and opera区分chrome和opera
【发布时间】:2015-03-31 10:02:32
【问题描述】:

我有这个 javascript 函数,它应该在 chrome 中打开与其他浏览器不同的 div。正确的 div 在 firefox、internet explorer、safari 和 chrome 中打开,但歌剧打开 chrome div 而不是其他 div。有没有办法阻止opera执行chrome功能?

     function Browser() {
    var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;

      if (is_chrome) {
        document.getElementById('chrome').style.display = 'block';
        document.getElementById('notchrome').style.display = 'none';
}
  }

【问题讨论】:

  • 你看过opera vs chrome的用户代理字符串吗?也许你可以在那里识别出一些东西。
  • 你需要这些 div 做什么?浏览器检测被鄙视。此外,如果您拥有基于 Blink 构建的最新 Opera,则可以将其识别为 Chrome :-)
  • 你想要一个只针对歌剧的css hack吗?设置做显示:无?
  • 我同意@Bergi - 您是否考虑过detecting features instead of browsers 用于您的特定用例?

标签: javascript google-chrome cross-browser opera conditional-statements


【解决方案1】:

如果您阅读此处,您会发现您可以查找 OPR 字符串来识别 Opera。

http://my.opera.com/ODIN/blog/2013/07/15/opera-user-agent-strings-opera-15-and-beyond

例如,您可以将其包含在您的测试中,如下所示:

var userAgent = navigator.userAgent.toLowerCase();
var is_chrome = userAgent.indexOf('chrome') > -1 && userAgent.indexOf('opr/') == -1;

【讨论】:

    【解决方案2】:

    不要冒犯你。但是,我认为,如果您检查它是否只有 chrome 而不是 opera,那么在 chrome 平台上构建的其他自定义浏览器会中断。以中文QQ浏览器为例。

    相反,您可以检查用户代理中是否包含“Chrome”以及 navigator.vendor 是否包含“Google Inc.”。这可以精确地为您提供 chrome。

    var isChrome = navigator.userAgent.toLowerCase().search('chrome') != -1 && navigator.vendor.toLowerCase().search('google') != -1;

    我使用 toLowerCase() 来保持简洁和微妙。

    【讨论】:

    • 不起作用。 Opera , Brave 返回true (上图)。具体来说,navigator.vendor.toLowerCase() 返回 google inc.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多