儘管兩者都是基於Webkit的瀏覽器,但Safari並未在URL中引用引號,而Chrome卻沒有。使用jQuery檢測Safari
因此我需要在JS中區分這兩個。
jQuery's browser detection docs將「safari」標記爲不建議使用。
有沒有更好的方法,或者我現在只堅持棄用的值?
儘管兩者都是基於Webkit的瀏覽器,但Safari並未在URL中引用引號,而Chrome卻沒有。使用jQuery檢測Safari
因此我需要在JS中區分這兩個。
jQuery's browser detection docs將「safari」標記爲不建議使用。
有沒有更好的方法,或者我現在只堅持棄用的值?
使用的feature detection
混合和Useragent
字符串:
var is_chrome = !!window.chrome && !is_opera;
var is_explorer= typeof document !== 'undefined' && !!document.documentMode && !isEdge;
var is_firefox = typeof window.InstallTrigger !== 'undefined';
var is_safari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
var is_opera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
用法:
if (is_safari) alert('Safari');
或Safari瀏覽器只,用這個:
if (/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {alert('Its Safari');}
如果您正在檢查瀏覽器使用$.browser
。但是,如果您正在檢查功能支持(推薦),然後使用$.support
。
您不應該使用$ .browser來啓用/禁用頁面上的功能。原因是它不可靠,一般不推薦。
如果您需要功能支持,那麼我建議您使用modernizr。
顯然,唯一可靠的和接受的解決方案是做功能檢測是這樣的:
browser_treats_urls_like_safari_does = false;
var last_location_hash = location.hash;
location.hash = '"blah"';
if (location.hash == '#%22blah%22')
browser_treats_urls_like_safari_does = true;
location.hash = last_location_hash;
好戲,但不幸的是它不起作用。由於location.hash處理字符串的方式,相等(location.hash =='#%22blah%22')將不起作用。 :/ – 2011-10-14 12:45:04
特徵檢測是要走的路,但有一個更好的方法,它沒有任何副作用。您的代碼段可能會干擾依賴於散列更改事件的其他腳本。我將問題標記爲[this]的副本(http://stackoverflow.com/a/9851769/938089?how-to-detect-safari-chrome-ie-firefox-and-opera-browser)。我已經在Safari 3.0-5.1.3(Mac和Windows)中創建和測試了該方法。這是一個單線:) – 2012-05-25 10:42:57
對於檢查Safari瀏覽器我用這個:
$.browser.safari = ($.browser.webkit && !(/chrome/.test(navigator.userAgent.toLowerCase())));
if ($.browser.safari) {
alert('this is safari');
}
它正常工作。
以下標識Safari 3.0以上,並從Chrome中區分開來:
isSafari = !!navigator.userAgent.match(/Version\/[\d\.]+.*Safari/)
這一個爲我工作的時候沒有其他人,謝謝。 – andygoestohollywood 2013-12-05 10:55:03
只有這個作品 – fdrv 2016-04-06 08:33:31
這就是事情。 TNX! – 2016-06-21 17:32:42
不幸的是,上面的例子中還將檢測Android的默認瀏覽器如Safari,它不是。 我用 navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1 && navigator.userAgent.indexOf('Android') == -1
泛型函數
getBrowseActive = function (browserName) {
if (navigator.userAgent.indexOf(browserName) > -1)
return true;
return false;
};
解決這個問題是檢測瀏覽器的WebKit版本,並檢查它是否是至少我們需要的一個,其他人做點別的一個非常有用的方法。
使用jQuery它是這樣的:
"use strict";
$(document).ready(function() {
var appVersion = navigator.appVersion;
var webkitVersion_positionStart = appVersion.indexOf("AppleWebKit/") + 12;
var webkitVersion_positionEnd = webkitVersion_positionStart + 3;
var webkitVersion = appVersion.slice(webkitVersion_positionStart, webkitVersion_positionEnd);
\t
console.log(webkitVersion);
if (webkitVersion < 537) {
console.log("webkit outdated.");
} else {
console.log("webkit ok.");
};
});
這提供了一個安全和永久修復的處理與瀏覽器的不同webkit的實現問題。
快樂編碼!
//Check if Safari
function isSafari() {
return /^((?!chrome).)*safari/i.test(navigator.userAgent);
}
//Check if MAC
if(navigator.userAgent.indexOf('Mac')>1){
alert(isSafari());
}
我發現被檢查的navigator.userAgent包含iPhone或iPad字
if (navigator.userAgent.toLowerCase().match(/(ipad|iphone)/)) {
//is safari
}
這將決定瀏覽器是否爲Safari或不是唯一的方式。
if(navigator.userAgent.indexOf('Safari') !=-1 && navigator.userAgent.indexOf('Chrome') == -1)
{
alert(its safari);
}else {
alert('its not safari');
}
不幸的是,不工作。在Chrome v66和Safari上測試。 – 2018-01-23 20:14:10
我不知道,如果堅持它是一個好主意,我還沒有深入檢查了這一點,雖然我只是瀏覽Chrome上的$ .browser文檔和它的標誌'$ .browser .safari === true'。 eeek。 – davin 2011-05-05 15:03:34
[如何檢測Safari,Chrome,IE,Firefox和Opera瀏覽器]的可能重複(http://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-瀏覽器)**沒有用戶代理嗅探** ?. – 2012-05-25 10:44:46