我知道 Stack Overflow 上有上千个关于使用 JavaScript 检测浏览器的问题。我的问题是如何在没有 window.navigator
(包括 navigator.userAgent
)的情况下检测浏览器?
首先,澄清一下,我不需要了解渲染引擎,这不是针对自适应布局的,不要 panic :我已经在进行特征检测了。如果为什么我问的关于检测浏览器的问题很重要,请发表评论,我很乐意拼接解释,但这可能会使问题变得异常冗长。
接下来,让我描述一下为什么我的问题不是重复的:
Browser detection in Javascript? 因为 19 个答案,其中 12 专门使用了
navigator.userAgent
(包括jQuery.browser
使用 userAgent,现在已经不存在了),4 使用navigator.appName
(在 Chrome 中给出“Netscape”...),1 通过推荐功能检测来回避问题,这与浏览器检测不同(我已经在使用功能检测,但要知道我可以使用它们的程度,我需要浏览器检测),并且 2 不是真正的答案或特定于 IE。 (虽然 this non-answer 实际上很好地解释了为什么我的问题在这里是相关的:我试图避免在某些浏览器上遇到会导致选项卡崩溃的痛点!)因为我的问题是寻求答案(甚至是 hack?)不使用window.navigator
,它不是那个问题的副本。Check if the user is using IE 因为 11 个答案中,有 10 个使用
navigator.userAgent
,其中 1 个使用 IE 技巧来仅检测 IE,这不足以回答我的问题(尽管它可能是可能是此处发布的有用解决方案的一小部分)?In Javascript, how do I determine if my current browser is Firefox on a computer vs everything else? 因为在 11 个答案中,8 个使用
navigator.userAgent
,2 个推荐特征检测(同样,这不是我的问题),1 个甚至不是答案,真的。How to detect chrome and safari browser (webkit) 因为8 个答案,其中 6 个使用
navigator.userAgent
,2 个是特定于 webkit 的。不幸的是,WebKit 不一定只与 Safari 绑定(bind),我需要了解浏览器,而不是渲染引擎。
希望这很清楚。
我知道还有其他方法可以做到这一点,但我不太了解每个浏览器的来龙去脉。在某些浏览器中,是否存在一致或可靠地暴露给 JavaScript 的对象或变量?我知道一些实验性 API 是 vendor 前缀的,但这似乎不是用于商业产品的好主意,尽管如果需要我愿意降低那么低。还有其他可能吗?
最佳答案
一个想法:
- IE 使用 ActiveX(仍然使用到 IE11,旧版),您可以通过查看 activeX 可用性相当容易地推断出用户正在使用 IE,但是如果安全设置已启用,您需要依靠,猜猜看,其他特征检测。
- Chrome 和 Firefox 都支持使用扩展,也许检测这些扩展会有所帮助
- Chrome 在全局范围内提供了
window['chrome']['webstore']
对象。 - 您可以使用
Object.keys
对窗口对象进行排序,并查找 vendor 特定名称,例如 'moz' 或 'ms' 或'o'.
如果结合使用 moz、ms 和 chrome-object,您可以找出三个最大的浏览器。
附带说明一下,功能检测仍然是最佳选择,不是针对 OP,而是针对 “我刚刚开始编程并且我想知道-我如何嗅出浏览器程序员”。
关于javascript - 如何在不使用 window.navigator 的情况下可靠地检测浏览器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27084036/