有可能检测到三星股票浏览器吗?

12

使用特征检测,而不是浏览器嗅探。这样更容易,如果下周的三星手机支持它会发生什么? - charlietfl
2
但它支持Canvas,只是有一个bug。 - Sam
1
可以很可能构建一个支持测试,这样当错误被修复时,就不会排除那些用户。 - charlietfl
@charlietfl 特征检测并不总是有效,例如三星自带浏览器会产生很多误报。 - Joshua
5个回答

8
你可以简单地做到这一点。
var isSamsungBrowser = navigator.userAgent.match(/SamsungBrowser/i)

1
你可以从这里看到,它并不适用于所有三星设备。其中一些设备的字符串为Samsung或设备型号以SGH开头... - eyalyoli

6
以下正则表达式涵盖了几乎所有三星移动设备。
if(navigator.userAgent.match(/SAMSUNG|Samsung|SGH-[I|N|T]|GT-[I|N]|SM-[A|N|P|T|Z]|SHV-E|SCH-[I|J|R|S]|SPH-L/i)) {
    console.log("it's Samsung");
    // your code for Samsung Smartphones goes here...
}

1
使用userAgent就足以检测出这个bug。查找字符串534.30即可。例如:
  if (window.navigator && window.navigator.userAgent.indexOf('534.30') > 0) {
    // Clear the canvas a different way because they are using a known-bad version of the default android browser
  }

谢谢。数字“534.30”代表WebKit版本吗? 如果是的话,其他移动制造商的userAgent中也可能有这个数字。 - Sam
是的,还有一个Chrome移动版不使用的。你可以检查这两个数字和webkit,更加安全。但是你只能"真正地大多数时候"保险。 - Simon Sarris
1
谢谢。但这并没有解决我的问题。其他安卓生产商可能检测到相同版本,不仅仅是三星。 我已经在华硕和HTC自带浏览器上测试了我的画布程序,它运行得很好!只有三星存在这个画布问题。 - Sam

1
我认为它可以没问题:

const isSamsungBrowser = navigator.userAgent.indexOf('SamsungBrowser') > - 1

0

一些三星用户代理中含有“samsung”一词。如果在用户代理字符串中找到了“samsung”,那就是一个很好的指示器。然而,我查看的大多数三星用户代理并不包含“samsung”这个词。但是有一个不同的检查方法,所有的三星型号(目前为止)都以“GT-xxxxxx”的格式存在,所以我们要检查用户代理中是否包含“android”,接着是UA中的某个位置有“GT-”(或者是“samsung”这个词)。显然,这种方法有点宽松,但在目前为止似乎能够捕捉到它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接