【问题标题】:Jquery code is returning true when is not supposed toJquery 代码在不应该返回 true 时
【发布时间】:2013-03-06 02:57:47
【问题描述】:

我在 jquery 中有这段代码,可以根据浏览器添加不同的 css 样式,因为我无法在完全相同的位置获取内容。 这是在用户使用 chrome 时将链接添加到样式表的代码。

<script type= "text/javascript">
    $.browser.chrome = /chrome/.test(navigator.userAgent.toLowerCase());
    if ($.browser.chrome) {
        document.write('<link rel="stylesheet" href="css/chrome.css" 
                                         type="text/css" media="screen">'); 
    }
</script>

但是,当我使用 chrome 时,另一个代码(将链接添加到 safari 样式表的相同代码)也变为 true,并且也添加了一个链接。所以当我使用 chrome 时我有两个样式表。两个代码完全相同,唯一的区别是“chrome”这个词被改为“safari”。

【问题讨论】:

  • 为什么 Chrome 和 Safari 都需要不同的样式表?我们托管和管理超过 1500 个网站,但没有一个网站使用特定于 Safari 的网站。因为它们都使用相同的布局引擎 (webkit),所以相同的调整适用于两种浏览器。

标签: jquery html css styles stylesheet


【解决方案1】:

要获得更好、更准确的 chrome 检测,请查看以下网址: https://stackoverflow.com/a/11382806/2177992

除此之外,您还可以像这样构建代码:

if ( chrome )
{
    //chrome stuff
}
else if ( safari )
{
    //safari stuff
}

这样,两者永远不会同时处于活动状态。

【讨论】:

  • 非常感谢。我是新来的,有些答案有点技术性,但我相信它们很有帮助!这个确实解决了问题。
【解决方案2】:
"mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.22 (khtml, like gecko) chrome/25.0.1364.172 safari/537.22"

Chrome 用户代理字符串中包含 safari,因此当您检查 safari 是否在字符串中时,Chrome 和 Safar 都为 true。

查看这些问题以获得更好的浏览器检测方法

Browser detection in javascript?

Detect version of browser

有趣的相关文章:History of the browser user-agent string

【讨论】:

    【解决方案3】:

    这是因为navigator.userAgent.toLowerCase() 包含safari。我的版本是mozilla/5.0 (windows nt 6.1) applewebkit/537.22 (khtml, like gecko) chrome/25.0.1364.172 safari/537.22

    根据http://user-agent-string.info/?Fuas=mozilla%2F5.0+%28windows+nt+6.1%29+applewebkit%2F537.22+%28khtml%2C+like+gecko%29+chrome%2F25.0.1364.172+safari%2F537.22&test=4483&action=analyze,这部分字符串称为browser signature

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多