使用 jQuery.browser 区分 Chrome 和 Safari
Posted
技术标签:
【中文标题】使用 jQuery.browser 区分 Chrome 和 Safari【英文标题】:Distinguish Chrome from Safari using jQuery.browser 【发布时间】:2011-03-19 05:54:44 【问题描述】:从 1.4 开始,jQuery.browser 似乎能够相当容易地识别 webkit。但是如何使用它来区分 Chrome 和 Safari(反之亦然)?
【问题讨论】:
【参考方案1】:您也可以尝试使用这种方法,它对我有用。
isSafari: function ()
var isSafari = (navigator.userAgent.indexOf('Safari') != -1
&& navigator.userAgent.indexOf('Chrome') == -1)
console.log('IsSafari : ' + isSafari);
return isSafari;
,
【讨论】:
【参考方案2】:没有 jQuery
isChrome = function()
return /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
isSafari = function()
return /Safari/.test(navigator.userAgent) && /Apple Computer/.test(navigator.vendor);
使用 jQuery
(以下不适用于 jQuery 1.9 及更高版本,因为 jQuery.browser
已从 jQuery 中删除。请参阅 http://api.jquery.com/jQuery.browser/)
$.browser.chrome = $.browser.webkit && !!window.chrome;
$.browser.safari = $.browser.webkit && !window.chrome;
【讨论】:
第一个解决方案非常优雅。 为什么!! chrome 是什么意思? 很遗憾 $.browser 被删除了。但是我们如何从 1.10 检测到呢?我在 API 文档中没有看到任何内容。【参考方案3】:由于 Sarfraz 没有更正他的答案(感谢 Sarfraz 为我指出正确的方向),我将在此处发布功能代码。
var userAgent = navigator.userAgent.toLowerCase();
$.browser.chrome = /chrome/.test(navigator.userAgent.toLowerCase());
// Is this a version of Chrome?
if($.browser.chrome)
userAgent = userAgent.substring(userAgent.indexOf('chrome/') +7);
userAgent = userAgent.substring(0,userAgent.indexOf('.'));
$.browser.version = userAgent;
// If it is chrome then jQuery thinks it's safari so we have to tell it it isn't
$.browser.safari = false;
// Is this a version of Safari?
if($.browser.safari)
userAgent = userAgent.substring(userAgent.indexOf('version/') +8);
userAgent = userAgent.substring(0,userAgent.indexOf('.'));
$.browser.version = userAgent;
【讨论】:
对于 safari,$.browser.version 最终会为您提供 webkit 的版本,而不是 safari 的版本。尝试 userAgent.indexOf('Version/') + 8 代替。 另外,您可以在userAgent = userAgent.substring(0,userAgent.indexOf('.'));
的行上使用子串直到空格字符而不是句点,以获得完整的版本号,而不仅仅是版本号的第一部分(主要编号) .
@David,您需要在 'Version/'
字符串中使用小写的 v
,因为前面的代码中用户代理字符串是小写的。【参考方案4】:
也适用于非 JQuery 用户:
navigator.userAgent.indexOf('WebKit') + 1 ?
((navigator.vendor || '').indexOf('Apple') + 1 ? /* Safari */ : /* Chrome */)
: /* not Webkit */
http://jsfiddle.net/HtWag/13/
【讨论】:
这对我有用。如果您不习惯这种条件语句,那么通读它会有点技巧,但是您将其布置得很好。非常感谢。【参考方案5】:window.chrome?$.browser.chrome=!0:($.browser.webkit&&($.browser.safari=!0),$.browser.chrome=!1);
此补丁添加了 $.browser.chrome 并从 $.browser.safari
中排除了 Goolge Chrome 检测【讨论】:
【参考方案6】:/Chrome/.test(navigator.userAgent)
【讨论】:
【参考方案7】:你可以这样做:
// Is this a version of Chrome?
if($.browser.chrome)
userAgent = userAgent.substring(userAgent.indexOf('chrome/') +7);
userAgent = userAgent.substring(0,userAgent.indexOf('.'));
version = userAgent;
// If it is chrome then jQuery thinks it's safari so we have to tell it it isn't
$.browser.safari = false;
// Is this a version of Safari?
if($.browser.safari)
userAgent = userAgent.substring(userAgent.indexOf('safari/') +7);
userAgent = userAgent.substring(0,userAgent.indexOf('.'));
version = userAgent;
http://api.jquery.com/jQuery.browser/
【讨论】:
嗯——$.browser.chrome 未定义。并且 $.browser.safari 对 chrome 和 safari 都适用 @sAc,你很接近,这应该出现在你提供的代码之前:var userAgent = navigator.userAgent.toLowerCase(); $.browser.chrome = /chrome/.test(navigator.userAgent.toLowerCase()); var version = 0;
@sAc,另外,version
变量是不需要的,应该用$.browser.version
替换。
@sAc,我愿意接受你的回答,因为它让我走上了正轨——但只要它包含不可操作的代码,我就无法这样做。请编辑您的答案以更正上述错误。
@kingjeffrey:我发布了来自 jquery 文档的代码,我的答案中发布了链接,它不是我写的。这些 cmets 中已经提到了任何修复:)以上是关于使用 jQuery.browser 区分 Chrome 和 Safari的主要内容,如果未能解决你的问题,请参考以下文章