둘 다 Webkit 기반 브라우저이지만 Safari는 URL에 따옴표를 urlencode하지만 Chrome은 그렇지 않습니다.
따라서 JS에서이 둘을 구분해야합니다.
jQuery의 브라우저 감지 문서는 “safari”를 사용되지 않음으로 표시합니다.
더 나은 방법이 있습니까 아니면 지금은 사용되지 않는 값을 고수합니까?
답변
feature detection
및 Useragent
문자열 혼합 사용 :
var is_opera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
var is_Edge = navigator.userAgent.indexOf("Edge") > -1;
var is_chrome = !!window.chrome && !is_opera && !is_Edge;
var is_explorer= typeof document !== 'undefined' && !!document.documentMode && !is_Edge;
var is_firefox = typeof window.InstallTrigger !== 'undefined';
var is_safari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
용법:
if (is_safari) alert('Safari');
또는 Safari의 경우에만 다음을 사용하십시오.
if ( /^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {alert('Its Safari');}
답변
다음은 Safari 3.0 이상을 식별하고 Chrome과 구별합니다.
isSafari = !!navigator.userAgent.match(/Version\/[\d\.]+.*Safari/)
답변
안타깝게도 위의 예는 Android의 기본 브라우저를 Safari로 감지하지만 그렇지 않습니다. 나는 사용했다
navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1 && navigator.userAgent.indexOf('Android') == -1
답변
Safari를 확인하기 위해 다음을 사용했습니다.
$.browser.safari = ($.browser.webkit && !(/chrome/.test(navigator.userAgent.toLowerCase())));
if ($.browser.safari) {
alert('this is safari');
}
제대로 작동합니다.
답변
분명히 신뢰할 수 있고 허용되는 유일한 솔루션은 다음과 같은 기능 감지를 수행하는 것입니다.
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;
답변
내가 찾은 유일한 방법은 navigator.userAgent에 iPhone 또는 iPad 단어가 포함되어 있는지 확인하는 것입니다.
if (navigator.userAgent.toLowerCase().match(/(ipad|iphone)/)) {
//is safari
}
답변
브라우저를 확인하는 경우 $.browser
. 그러나 기능 지원 (권장)을 확인하는 경우 $.support
.
$ .browser를 사용하여 페이지의 기능을 활성화 / 비활성화하면 안됩니다. 이유는 신뢰할 수 없으며 일반적으로 권장되지 않습니다.
기능 지원이 필요한 경우 modernizr을 권장 합니다.