如何判断用户是否使用Brave作为浏览器?

Cra*_*att 13 html javascript php

我一直在使用Brave浏览器(https://www.brave.com/),我无法弄清楚如何判断用户是否使用Brave.我使用一个简单的文档来输出用户代理:

<script>document.write(navigator.userAgent);</script>
Run Code Online (Sandbox Code Playgroud)

我得到:

Mozilla/5.0(Windows NT 10.0; Win64; x64)AppleWebKit/537.36(KHTML,与Gecko一样)Chrome/49.0.2623.108 Safari/537.36

这在我的情况下并没有真正帮助我.有谁知道如何确定在PHP或JavaScript中使用Brave的人?谢谢!

Aey*_*oun 18

截至 2020 年 4 月,您可以使用此检测方法获得用户是否使用 Brave 的布尔答案:

(navigator.brave && await navigator.brave.isBrave() || false)
Run Code Online (Sandbox Code Playgroud)

  • 有没有没有“await”关键字的替代方案?当没有其他浏览器定义“navigator.brave”时,为什么我要调用那个东西(而不检查它的可调用性)。我认为测试的一部分是足够的,其余的只是有问题的。我的版本:`!!navigator.brave` (6认同)
  • 这是正确的答案,甚至得到了一位勇敢的开发人员的确认 https://github.com/brave/brave-browser/issues/10165#issuecomment-641128278 (2认同)
  • 这在桌面浏览器上完美运行。不过,它似乎不适用于移动设备。有人有一个适用于所有设备的代码片段吗? (2认同)

Fed*_*kun 11

用户代理中的"勇敢"已在0.9版本中删除.

来自更改日志:

从User Agent HTTP标头中删除了Brave以减少指纹识别.

  • @mariobgr一种方法,调用勇敢阻塞的资源,如果请求几乎立即失败,则用户处于勇敢状态。该方法可能会有误报,因此要小心,但它作为一种快速而肮脏的方法非常有效 (2认同)

And*_*rlo 10

有一种方法可以在没有任何 API 调用的情况下检查用户是否正在使用勇敢。我创建了以下函数,如果它勇敢,则返回 false 或 True

function isBrave() {
  if (window.navigator.brave != undefined) {
    if (window.navigator.brave.isBrave.name == "isBrave") {
      return true;
    } else {
      return false;
    }
  } else {
    return false;
  }
}

document.getElementById("ans").innerHTML = isBrave();
Run Code Online (Sandbox Code Playgroud)
Is this Brave? <span id="ans"></span>
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的答案,它更快。但这在 Android 和其他一些使用移动应用程序的设备上不起作用。 (2认同)

小智 9

Kohjah Breese 的解决方案无法在 Android 上检测 Brave(例如 Chrome 被检测为 Brave)。但正如他所说,“如果你在 DuckDuckGo 中搜索 [我的用户代理是什么],他们会返回 Brave。” 然后你可以使用 Duckduckgo 的 API 来知道他们的浏览器是否是 Brave :

var request = new XMLHttpRequest()

request.open('GET', 'https://api.duckduckgo.com/?q=useragent&format=json', true)

request.onload = function () {
  var data = JSON.parse(this.response)
  var isBrave = data['Answer'].includes('Brave');
  if(isBrave){
    console.log( isBrave );
  }
}

request.send()
Run Code Online (Sandbox Code Playgroud)


小智 7

Brave与Chrome具有相同的用户代理.但Chrome本身在窗口对象中添加了很多(目前为1768)特定于chrome的属性.其中之一是window.google.因此检测Brave非常简单(就像现在一样):

const ua = window.navigator.userAgent.toLowerCase();
const isChrome = /chrome|crios/.test(ua) && ! /edge|opr\//.test(ua)
const isBrave = isChrome && ! window.google;
Run Code Online (Sandbox Code Playgroud)

太勇敢了,哈哈.

  • 至于2019年7月,这不起作用。Chrome 和 Brave 都返回“isBrave: true”。:( (2认同)

Koh*_*ese 6

勇敢的出现在窗口对象中有一些不同的对象。我不确定这些版本在Brave版本中有多连续,但是我在window.navigator对象中注意到了两个被屏蔽的地方:plugins和mimeTypes。由于Brave旨在成为一种隐私浏览器,因此我认为这很可能会保持空白。所以我的检查是检查那些长度。

请注意,您还需要先检查浏览器是否为台式机。似乎您无法检测到Brave Mobile浏览器;下面的代码将使用许多移动浏览器

var agent = navigator.userAgent.toLowerCase();
var isChrome = /chrome|crios/.test(agent) && ! /edge|opr\//.test(agent);
var isBrave = isChrome && window.navigator.plugins.length === 0 && window.navigator.mimeTypes.length === 0;
if(isBrave)
    console.log( isBrave );
Run Code Online (Sandbox Code Playgroud)

如果您在DuckDuckGo中搜索[我的用户代理人],他们将返回Brave。如果打开附件的JS文件,则会发现可以检测Brave的精致浏览器检测。