[javascript] jQuery를 사용하여 Safari 감지

둘 다 Webkit 기반 브라우저이지만 Safari는 URL에 따옴표를 urlencode하지만 Chrome은 그렇지 않습니다.

따라서 JS에서이 둘을 구분해야합니다.

jQuery의 브라우저 감지 문서는 “safari”를 사용되지 않음으로 표시합니다.

더 나은 방법이 있습니까 아니면 지금은 사용되지 않는 값을 고수합니까?



답변

feature detectionUseragent문자열 혼합 사용 :

    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을 권장 합니다.