Javascript 如何设置导航器用户代理?

Javascript 如何设置导航器用户代理?,javascript,browser,user-agent,Javascript,Browser,User Agent,好的,这是一个边缘案例,我已经设法解决了。我正在新的Tizen操作系统上测试我的应用程序。我的JS代码有数千个导航器检查。比如: navigator.userAgent.toLocaleLowerCase().indexOf("android") || navigator.userAgent.toLocaleLowerCase().indexOf("iPad") 现在,我的测试设备上Tizen OS的userAgent没有这两个字符串。因此,我的许多css和JS都崩溃了。我现在处于POC模式,

好的,这是一个边缘案例,我已经设法解决了。我正在新的Tizen操作系统上测试我的应用程序。我的JS代码有数千个导航器检查。比如:

navigator.userAgent.toLocaleLowerCase().indexOf("android") || navigator.userAgent.toLocaleLowerCase().indexOf("iPad")
现在,我的测试设备上Tizen OS的userAgent没有这两个字符串。因此,我的许多css和JS都崩溃了。我现在处于POC模式,不想花时间在所有这些条件中添加额外的检查。有没有办法以编程方式设置userAgent?大致如下:

navigator.userAgent += " Tizen" //does not work.
说这是一个读写属性。但是我不能修改它。帮我做这个。或者是另一种欺骗userAgent的智能方法,或者是正确的设置方法。谢谢

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

在这种情况下,是您的JS代码出错了

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

简言之,如果您的代码看起来与所描述的一样,那么您就做错了。检测UA字符串的合法理由很少,而且这些理由都不适用于在客户端本身上运行的代码

浏览器中有数千行这样的东西????这只会对网站的性能造成负面影响

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

userAgent字符串是只读值

但是,您可以,因此有一些方法可以使其可写。丑陋,但可能

不过我真的建议你不要这样做

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

当然,如果用户修改浏览器的UA字符串,这将是完全不可靠的


如果你必须的话,现在就用黑客来修复它,但是要知道这会占用你越来越多的时间。你真的需要考虑切换到一个更好的编码实践,比如特征检测而不是UA检测。

< P>我最近创建了一个GIST来制作只读属性写的(你可以找到一个例子来覆盖Navigo.UsAgent)。正如Spudley所说,它很难看,不推荐使用,但我在单元测试中使用它来动态更改用户代理,所以要小心


要点:

这是一种非常糟糕的方法。甚至您引用的MDN文章也明确指出:“基于检测用户代理字符串的浏览器标识是不可靠的,不推荐使用(…)”。特征检测更容易、更安全。也可以考虑使用.BTW:<代码> .TeloCalelWoReCase](索引)(“iPad”)肯定不会起作用,是吗?code>iPad不是小写。@Spudley:是的,这是我的打字错误。我同意并理解这是一种糟糕的方法。请理解,我只是想在这里运行POC。我的最终目标是测试Tizen OS。事后想一想,“数千张这样的支票”是一种夸张,值得投两张反对票。谢谢你的帮助。我只需要确定一些东西并做出一些决定。这对我来说是完美的,因为我想将socket.io与React Native一起使用,但一旦在中添加socket.io,就必须将用户代理设置为“React Native”,否则就无法使用调试器!非常感谢。最好的解决方案!