Safari에만 적용되는 코드를 짜고 싶다면?

브라우저를 감지해서, 현재 브라우저가 Safari인지 아닌지를 판별해야 한다.

 

브라우저를 감지하고 그에 따른 처리를 하는 방법은 상황에 따라 크게 두 가지로 갈린다.

(어느 경우든 주요한 목적은 호환성 때문일 것이다.)

 

1. Safari에서만 CSS 스타일링을 다르게 적용해야 하는 경우

/* Safari 10.1+ */

@media not all and (min-resolution:.001dpcm)
{ @supports (-webkit-appearance:none) {
	/* 이 안에 Safari(10.1 이상)에서만 적용할 스타일 작성 */
}}

 

  • 위 코드 외에도, 이 페이지의 첫 번째 답변에 다양한 버전의 Safari에 따른 CSS hack들이 친절하게 안내되어 있다.

 

2. Safari에서만 전체적으로 다른 로직이 필요한 경우

 

How to detect Safari, Chrome, IE, Firefox and Opera browser?

I have 5 addons/extensions for FF, Chrome, IE, Opera, and Safari. How can I recognize the user browser and redirect (once an install button has been clicked) to download the corresponding addon?

stackoverflow.com

  • 직접 코드를 작성하기에 시간이 촉박하다면 아래와 같이 브라우저를 감지해주는 라이브러리의 도움을 받을 수 있다. 내부 코드(under the hood)를 확인해보면 이 라이브러리도 결국 userAgent를 사용하고 있음을 알 수 있다. 브라우저를 감지하는 함수들 외에도 이것저것 체크할 수 있는 여러가지 함수들이 많은 라이브러리다. Dependency도 빵개고 가벼운 라이브러리지만 5년 전에 배포된 라이브러리인 게 조금 마음에 걸린다. 하지만 다른 건 몰라도 브라우저가 Safari인지 여부는 아무 문제 없이 잘 감지해준다.
    https://www.npmjs.com/package/is_js
 

is_js

micro check library

www.npmjs.com

// 내부 코드
// is current browser safari?
    // parameter is optional
    is.safari = function(range) {
        var match = userAgent.match(/version\/(\d+).+?safari/);
        return match !== null && compareVersion(match[1], range);
    };
    // safari method does not support 'all' and 'any' interfaces
    is.safari.api = ['not'];
// 사용 방법
is.safari();
=> true if current browser is safari

 

 

복사했습니다!