如何设置导航器userAgent?

时间:2013-09-23 13:45:50

标签: javascript browser user-agent

好的,这是我设法登陆的一个边缘案例。我正在新的Tizen OS上测试我的应用程序。我的JS代码有成千上万的导航器检查。类似的东西:

navigator.userAgent.toLocaleLowerCase().indexOf("android") || navigator.userAgent.toLocaleLowerCase().indexOf("iPad")

现在Tizen OS在我的测试设备上的userAgent没有这些字符串。很多我的CSS和JS都因此而破裂。我现在处于POC模式,并且不想花时间为所有这些条件添加额外的检查。有没有办法以编程方式设置userAgent?有点像:

navigator.userAgent += " Tizen" //does not work.

MDN表示它是一个读写属性。我无法修改它。帮助我。欺骗userAgent的另一种聪明方式或者设置它的正确方法。感谢。

2 个答案:

答案 0 :(得分:12)

  

我的JS代码有数以千计的导航器检查

在这种情况下,你的JS代码有问题。

你基本上刚刚发现了进行UA字符串检测的最终原因被认为是非常糟糕的做法。

简而言之,如果您的代码看起来如上所述,那么您做错了。检测UA字符串的合理原因很少,这些原因都不适用于在客户端上运行的代码。

在浏览器中有数千行这样的东西????这只会对您网站的性能造成不利影响。

  

有没有办法以编程方式设置userAgent?   MDN说它是一个读写属性。

userAgent字符串是只读值。

但是,可以 override the getter,因此有一些方法可以让它成为可写的。丑陋,但可能。

我真的建议不要这样做。

即使没有浏览器供应商故意改变他们的UA字符串来打破这种代码(他们这样做),你的任务基本上永无止境;每次发布新设备/浏览器/版本时,您都必须不断重新访问此代码,并且您的数千行代码将不断变得越来越大。

另外,如果用户修改了浏览器的UA字符串,它将完全不可靠。

如果必须的话,现在用黑客修复它,但要注意这将继续吃掉你越来越多的时间。您确实需要考虑切换到更好的编码实践,例如特征检测而不是UA检测。

答案 1 :(得分:4)

我最近创建了一个要点,使readonly propertys可写(您可以找到一个覆盖navigator.userAgent的示例)。像Spudley说的那样,它很丑陋而且不推荐,但是我用它进行单元测试来动态改变用户代理,所以要小心。

要点:https://gist.github.com/moehlone/bed7dd6cb38fc55bd640