Tom*_*mas 119 javascript browser-detection
如何使用JavaScript检测Safari浏览器?我在下面尝试了代码,它不仅可以检测Safari,还可以检测Chrome浏览器.
function IsSafari() {
var is_safari = navigator.userAgent.toLowerCase().indexOf('safari/') > -1;
return is_safari;
}
Run Code Online (Sandbox Code Playgroud)
fre*_*nte 134
注意:始终尝试检测您尝试修复的特定行为,而不是使用它进行定位isSafari?
作为最后的手段,使用此正则表达式检测Safari:
var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
Run Code Online (Sandbox Code Playgroud)
它使用负面外观,并且不包括Chrome,Edge以及Safari在其用户代理中包含该名称的所有Android浏览器.
dav*_*vid 98
您可以轻松使用Chrome的索引来过滤Chrome:
var ua = navigator.userAgent.toLowerCase();
if (ua.indexOf('safari') != -1) {
if (ua.indexOf('chrome') > -1) {
alert("1") // Chrome
} else {
alert("2") // Safari
}
}
Run Code Online (Sandbox Code Playgroud)
qin*_*ngu 75
正如其他人已经指出的那样,特征检测比检查特定浏览器更受欢迎.一个原因是可以更改用户代理字符串.另一个原因是字符串可能会更改并破坏新版本的代码.
如果你仍然想要测试任何Safari版本,我建议使用它
var isSafari = navigator.vendor && navigator.vendor.indexOf('Apple') > -1 &&
navigator.userAgent &&
navigator.userAgent.indexOf('CriOS') == -1 &&
navigator.userAgent.indexOf('FxiOS') == -1;
Run Code Online (Sandbox Code Playgroud)
这适用于所有设备上的任何版本的Safari:Mac,iPhone,iPod,iPad.
要在您当前的浏览器中进行测试:https://jsfiddle.net/j5hgcbm2/
根据Chrome文档更新,以便正确检测iOS上的Chrome
值得注意的是,iOS上的所有浏览器都只是Safari的包装器并使用相同的引擎.请参阅bfred.it在此主题中对自己答案的评论.
根据Firefox文档更新,以正确检测iOS上的Firefox
luk*_*yer 37
只需使用:
var isSafari = window.safari !== undefined;
if (isSafari) console.log("Safari, yeah!");
Run Code Online (Sandbox Code Playgroud)
wah*_*hid 18
此代码仅用于检测safari浏览器
if (navigator.userAgent.search("Safari") >= 0 && navigator.userAgent.search("Chrome") < 0)
{
alert("Browser is Safari");
}
Run Code Online (Sandbox Code Playgroud)
Inf*_*gon 16
检测手势更改支持,如下所示:
const isSafari = !!window.GestureEvent
document.write(isSafari ? "You are using Safari." : "You are not using Safari.")Run Code Online (Sandbox Code Playgroud)
漂亮又简单;适用于 iOS 和 Android!如果您需要 ES5 支持,请替换const为var.
小智 11
我不知道为什么 OP 想要检测 Safari,但在极少数情况下,您现在需要浏览器嗅探,检测渲染引擎可能比浏览器名称更重要。例如,在 iOS 上,所有浏览器都使用 Safari/Webkit 引擎,因此如果底层渲染器实际上是 Safari/Webkit,那么将“chrome”或“firefox”作为浏览器名称是没有意义的。我没有用旧浏览器测试过这段代码,但它适用于 Android、iOS、OS X、Windows 和 Linux 上的所有最新版本。
<script>
let browserName = "";
if(navigator.vendor.match(/google/i)) {
browserName = 'chrome/blink';
}
else if(navigator.vendor.match(/apple/i)) {
browserName = 'safari/webkit';
}
else if(navigator.userAgent.match(/firefox\//i)) {
browserName = 'firefox/gecko';
}
else if(navigator.userAgent.match(/edge\//i)) {
browserName = 'edge/edgehtml';
}
else if(navigator.userAgent.match(/trident\//i)) {
browserName = 'ie/trident';
}
else
{
browserName = navigator.userAgent + "\n" + navigator.vendor;
}
alert(browserName);
</script>
Run Code Online (Sandbox Code Playgroud)
澄清:
Sim*_*one 11
就我而言,我需要同时在 iOS 和 macOS 上针对 Safari。这对我有用:
if (/apple/i.test(navigator.vendor)) {
// It's Safari
}
Run Code Online (Sandbox Code Playgroud)
tyl*_*ell 10
因为chrome和safari的userAgent几乎相同,所以可以更容易地查看浏览器的供应商
苹果浏览器
navigator.vendor == "Apple Computer, Inc."
Run Code Online (Sandbox Code Playgroud)
铬
navigator.vendor == "Google Inc."
Run Code Online (Sandbox Code Playgroud)
FireFox(为什么它是空的?)
navigator.vendor == ""
Run Code Online (Sandbox Code Playgroud)
IE(为什么它未定义?)
navigator.vendor == undefined
Run Code Online (Sandbox Code Playgroud)
小智 7
只有Safari whitout Chrome:
在尝试其他代码后,我没有发现任何适用于新旧版本的Safari.
最后,我做了这个代码,对我来说效果非常好:
var ua = navigator.userAgent.toLowerCase();
var isSafari = false;
try {
isSafari = /constructor/i.test(window.HTMLElement) || (function (p) { return p.toString() === "[object SafariRemoteNotification]"; })(!window['safari'] || safari.pushNotification);
}
catch(err) {}
isSafari = (isSafari || ((ua.indexOf('safari') != -1)&& (!(ua.indexOf('chrome')!= -1) && (ua.indexOf('version/')!= -1))));
//test
if (isSafari)
{
//Code for Safari Browser (Desktop and Mobile)
document.getElementById('idbody').innerHTML = "This is Safari!";
}
else
{
document.getElementById('idbody').innerHTML = "Not is Safari!";
}Run Code Online (Sandbox Code Playgroud)
<body id="idbody">
</body>Run Code Online (Sandbox Code Playgroud)
我观察到只有一个词可以区分 Safari - “版本”。所以这个正则表达式将完美运行:
/.*Version.*Safari.*/.test(navigator.userAgent)
Run Code Online (Sandbox Code Playgroud)
我用这个
function getBrowserName() {
var name = "Unknown";
if(navigator.userAgent.indexOf("MSIE")!=-1){
name = "MSIE";
}
else if(navigator.userAgent.indexOf("Firefox")!=-1){
name = "Firefox";
}
else if(navigator.userAgent.indexOf("Opera")!=-1){
name = "Opera";
}
else if(navigator.userAgent.indexOf("Chrome") != -1){
name = "Chrome";
}
else if(navigator.userAgent.indexOf("Safari")!=-1){
name = "Safari";
}
return name;
}
if( getBrowserName() == "Safari" ){
alert("You are using Safari");
}else{
alert("You are surfing on " + getBrowserName(name));
}
Run Code Online (Sandbox Code Playgroud)
最简单的答案:
function isSafari() {
if (navigator.vendor.match(/[Aa]+pple/g).length > 0 )
return true;
return false;
}
Run Code Online (Sandbox Code Playgroud)
阅读许多答案和帖子并确定最准确的解决方案。在 Safari、Chrome、Firefox(桌面和 iOS 版本)中测试。首先我们需要检测Apple供应商,然后排除 Chrome 和 Firefox(适用于 iOS)。
let isSafari = navigator.vendor.match(/apple/i) &&
!navigator.userAgent.match(/crios/i) &&
!navigator.userAgent.match(/fxios/i);
if (isSafari) {
//
} else {
//
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
164725 次 |
| 最近记录: |