【发布时间】:2014-11-23 00:07:59
【问题描述】:
我知道 Stack Overflow 上有一千个关于使用 JavaScript 检测浏览器的问题。我的问题是如何在没有window.navigator(包括navigator.userAgent)的情况下检测浏览器?
首先,澄清一下,我不需要知道渲染引擎,这不是用于自适应布局的,不要惊慌:我已经在做特征检测了。如果为什么我问的是检测浏览器很重要,请发表评论,我很乐意解释,但这可能会使问题过长。
接下来,让我描述一下为什么我的问题不重复:
Browser detection in Javascript? 因为在 19 个答案中,有 12 个专门使用
navigator.userAgent(包括使用的jQuery.browseruserAgent,现在已经消失了),4 使用navigator.appName(在 Chrome 中给出“Netscape”...),1 通过推荐功能回避问题检测,这与浏览器检测不同(我已经在使用特征检测,但是要知道我可以使用它们的程度,我需要浏览器检测),并且 2 不是真正的答案或者是特定于 IE。 (虽然this non-answer 实际上非常解释为什么我的问题是相关的:我试图避免在某些浏览器上遇到会导致标签崩溃的痛点!)因为我的问题是要求答案(甚至是黑客攻击?)不使用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 相关联,我需要了解浏览器,而不是渲染引擎。
希望这很清楚。
我知道还有其他方法可以做到这一点,但我不太了解每个浏览器的来龙去脉。在某些浏览器中是否存在始终或可靠地暴露给 JavaScript 的对象或变量,也许?我知道一些实验性的 API 是以供应商为前缀的,但这似乎不是一个用于商业产品的好主意,尽管如果需要我愿意降低这个值。还有其他可能吗?
【问题讨论】:
-
@meager 你读过我的问题吗?除了用户代理之外,还有哪些其他方式可以检测到浏览器类型?请重新打开问题。
-
所有这些问题都有非 UA 答案。
-
... window.navigator 实际上算作一个用户代理字符串——我在这里试图避免这种情况。
-
那么为什么不运行一些示例 JavaScript 来实际估计性能,而不仅仅是提供预定义的估计值。您提出的方法可能经不起时间的考验。这并没有说明您将忽略的浏览器版本之间的差异:Firefox ESR 版本、Chrome 稳定版/Canary、您不考虑的浏览器(如 Midori)和根本不是浏览器的脚本引擎(如 nodejs/V8)。
标签: javascript cross-browser user-agent