Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Chrome被检测为带有javascript的Safari_Javascript_Google Chrome_Safari_Browser Detection - Fatal编程技术网

Chrome被检测为带有javascript的Safari

Chrome被检测为带有javascript的Safari,javascript,google-chrome,safari,browser-detection,Javascript,Google Chrome,Safari,Browser Detection,我正在寻找一种使用javascript检测Safari的方法。我知道它已经被覆盖了很多次,但可能有些东西被改变了,它不再工作了。至少对我来说是这样 以下是我的工作: <script> if(!isSafari()){ alert('not Safari'); } else { alert('I am Safari'); } function isSafari(){ var is_safari = nav

我正在寻找一种使用javascript检测Safari的方法。我知道它已经被覆盖了很多次,但可能有些东西被改变了,它不再工作了。至少对我来说是这样

以下是我的工作:

<script>

    if(!isSafari()){
      alert('not Safari');
    } else {
      alert('I am Safari');
    }


    function isSafari(){    
      var is_safari = navigator.userAgent.indexOf("Safari") > -1;
      if(is_safari){
        return true;
      }
    }
  </script>

如果(!isSafari()){
警惕(‘非狩猎’);
}否则{
警惕(“我是游猎者”);
}
函数isSafari(){
var是_safari=navigator.userAgent.indexOf(“safari”)>-1;
如果(是野生动物园){
返回true;
}
}
jsbin:


如果您在Safari和Chrome中运行此代码,您将收到相同的警报“我是Safari”,那么如何仅检测Safari?我的Safari版本是4.0.3,以备不时之需。

如果您使用Chrome在web开发者控制台中键入该版本:

navigator.userAgent
您将得到一个字符串,类似于:

"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.92 Safari/537.4"
此字符串包含
Safari
,因此您必须特别检查该字符串是否也包含chrome。您可以使用一个简单的单内衬:

var is_safari = /^(?!.*chrome).*safari/i.test(navigator.userAgent);

Chrome在userAgent字符串中同时包含“Chrome”和“Safari”。Safari只有“Safari”

所以这是可行的:

var is_chrome = navigator.userAgent.indexOf('Chrome') > -1; 
var is_explorer = navigator.userAgent.indexOf('MSIE') > -1; 
var is_firefox = navigator.userAgent.indexOf('Firefox') > -1; 
var is_safari = navigator.userAgent.indexOf("Safari") > -1; 
var is_Opera = navigator.userAgent.indexOf("Presto") > -1; 
if ((is_chrome)&&(is_safari)) {is_safari=false;} 
如果(是“safari”)警报(“safari”)

或仅适用于Safari,请使用以下选项:

if (navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1) {alert('Its Safari');} 

信用证:卡巴鲁

我正在使用更新版本的Safari,但这仍然适用

Safari的用户代理:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/536.26.14 (KHTML, like Gecko) Version/6.0.1 Safari/536.26.14
Chrome的用户代理

 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.79 Safari/537.4

正如您所看到的,它们都包含“Safari”(很可能是因为它们都使用WebKit)。您的函数只检查Safari。因此,您的函数需要检查“Safari”,并确保字符串不包含“Chrome”。

如果您查看您的用户代理,您将看到它在字符串中包含“Safari”

您的用户代理:Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/537.4(KHTML,如Gecko)Chrome/22.0.1229.92 Safari/537.4

var xSAF = isSafari();

if(SAF)
{
    alert('Is Safari');
} else {
    alert('Not Safari');
}

function isSafari()
{
    var xUA = navigator.userAgent;
    if((xUA.indexOf("Safari")) && (xUA.indexOf("Chrome") == -1))
    {
        return true;
    } else {
        return false;
    }
}

为什么要进行浏览器检测?特征检测更可靠、更稳定!我敢打赌这是因为他们都使用Webkit。也许您还应该检查用户代理是否不包含“Chrome”一词?@Sirko:在某些情况下,浏览器检测是必要的。关于stackoverflow使用浏览器检测的问题在其代码中得到了解决:@Alex:您到底想使用浏览器版本检测做什么?我听说safari在tranlate3d上有问题,这导致flexslider插件在滚动时被固定位置的错误所困扰。可能我需要更深入地尝试修复它,但到目前为止,我只是决定检测safari并禁用它。这不会影响上述条件,只是需要注意:Chrome的某些用户代理不包含safari。在这里,很少有不包含Safari的。检查这些行号:>92152191231250272307380451703