【问题标题】:Is it possible to block clients that are using the Safari desktop browser?是否可以阻止使用 Safari 桌面浏览器的客户端?
【发布时间】:2019-06-18 14:09:30
【问题描述】:

由于桌面版 Safari 不支持<input type="date">,我想告诉使用桌面版 Safari 的客户他们应该切换到另一个浏览器。

我尝试了以下功能,但不幸的是,即使我使用 Chrome,它也会返回 Safari

function getBrowser() { 
    if((navigator.userAgent.indexOf("Opera") != -1 || navigator.userAgent.indexOf('OPR')) != -1 ) 
    {
        return 'Opera';
    }
    else if(navigator.userAgent.indexOf("Edge") != -1 )
    {
        return 'Edge';
    }
    else if(navigator.userAgent.indexOf("Samsung") != -1) {
        return 'Samsung Browser';
    }
    else if(navigator.userAgent.indexOf("Safari") != -1)
    {
        return 'Safari';
    }
    else if (navigator.userAgent.indexOf("Chrome") != -1) {
        return 'Chrome';
    }
    else if(navigator.userAgent.indexOf("Firefox") != -1 ) 
    {
        return 'Firefox';
    }
    else if(navigator.userAgent.indexOf("MSIE") != -1 )
    {
        return 'IE';
    }  
    else 
    {
        return 'unknown';
    }
}

是否有另一种方法可以检测客户端是否正在使用 Safari?如果有,是否可以检测到正在使用桌面版本的用户?因为在 iPhone 和 iPad 上,<input type="date"> 标签确实有效。

【问题讨论】:

  • 如果可能的话,您应该检查支持哪些功能,而不是检查单个浏览器。似乎有一些技巧可用于检查浏览器是否为日期输入提供日期选择器:stackoverflow.com/questions/10193294/…

标签: javascript safari


【解决方案1】:

在这种情况下,您不应检查特定的浏览器类型。相反,您应该检查是否支持日期输入类型,如果不支持,则做出相应的反应。 https://diveinto.html5doctor.com/detect.html#input-types

基本的做法是大部分浏览器将无法识别的输入类型转换为“文本”,因此您可以创建一个输入,将其类型设置为“日期”,然后查看是否已更改为“文本”:

const testInput = document.createElement('input');
testInput.setAttribute('type', 'date');
if (testInput.type !== 'date') {
    // The date input type is not supported by this browser.
}

【讨论】:

  • 谢谢,我认为这更像是我需要的。我会尽快接受答案。
【解决方案2】:

尝试这样查找浏览器名称。更多信息请参考code

var objAgent = navigator.userAgent;
var objbrowserName  = navigator.appName;
var objOffsetName,objOffsetVersion;

// In Chrome 
if ((objOffsetVersion=objAgent.indexOf("Chrome"))!=-1) {
 objbrowserName = "Chrome";
}
// In Microsoft internet explorer
else if ((objOffsetVersion=objAgent.indexOf("MSIE"))!=-1) {
 objbrowserName = "Microsoft Internet Explorer";
}

// In Firefox
else if ((objOffsetVersion=objAgent.indexOf("Firefox"))!=-1) {
 objbrowserName = "Firefox";
}
// In Safari 
else if ((objOffsetVersion=objAgent.indexOf("Safari"))!=-1) {
 objbrowserName = "Safari";
}
// For other browser "name/version" is at the end of userAgent 
else if ( (objOffsetName=objAgent.lastIndexOf(' ')+1) < 
          (objOffsetVersion=objAgent.lastIndexOf('/')) ) 
{
 objbrowserName = objAgent.substring(objOffsetName,objOffsetVersion);
 if (objbrowserName.toLowerCase()==objbrowserName.toUpperCase()) {
  objbrowserName = navigator.appName;
 }
}

document.write('Browser name  = '+objbrowserName)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    • 2019-12-25
    • 2023-04-06
    • 2014-10-29
    • 2013-09-29
    • 1970-01-01
    • 2011-04-20
    相关资源
    最近更新 更多