기본 콘텐츠로 건너뛰기

JavaScript로 브라우저 종류·IE 버전 체크하기 – userAgent 완벽 정리

FRONTEND / LEGACY SUPPORT

JavaScript로 브라우저 종류 & IE 버전 체크하기 (userAgent 활용)

레거시 웹 프로젝트 유지보수를 위한 필수 가이드. navigator.userAgent를 분석하여 IE 버전별 분기 처리와 최신 브라우저를 구분하는 JavaScript 실무 코드를 정리했습니다.

1. 브라우저 & IE 버전 체크 함수 전체 코드

먼저, 사용자 브라우저를 문자열로 반환하는 함수를 하나로 정리해보겠습니다. 이 함수는 IE, Chrome, Firefox 등 다양한 브라우저 환경을 식별하는 데 사용됩니다.

function getBrowserName() {
  var _ua = navigator.userAgent;
  var rv = -1;

  // -------------------------
  // 1) IE 11, 10, 9, 8 체크 (Trident 기반)
  // -------------------------
  var trident = _ua.match(/Trident\/(\d\.\d)/i);
  if (trident !== null) {
    if (trident[1] === "7.0") return "IE11";
    if (trident[1] === "6.0") return "IE10";
    if (trident[1] === "5.0") return "IE9";
    if (trident[1] === "4.0") return "IE8";
  }

  // -------------------------
  // 2) IE 7 체크
  // -------------------------
  if (navigator.appName === "Microsoft Internet Explorer") {
    return "IE7";
  }

  // -------------------------
  // 3) 그 외 브라우저 (Chrome, Firefox, Safari 등)
  // -------------------------
  var agt = _ua.toLowerCase();

  if (agt.indexOf("chrome") !== -1) return "Chrome";
  if (agt.indexOf("opera") !== -1) return "Opera";
  if (agt.indexOf("staroffice") !== -1) return "Star Office";
  if (agt.indexOf("webtv") !== -1) return "WebTV";
  if (agt.indexOf("beonex") !== -1) return "Beonex";
  if (agt.indexOf("chimera") !== -1) return "Chimera";
  if (agt.indexOf("netpositive") !== -1) return "NetPositive";
  if (agt.indexOf("phoenix") !== -1) return "Phoenix";
  if (agt.indexOf("firefox") !== -1) return "Firefox";
  if (agt.indexOf("safari") !== -1) return "Safari";
  if (agt.indexOf("skipstone") !== -1) return "SkipStone";
  if (agt.indexOf("netscape") !== -1) return "Netscape";
  if (agt.indexOf("mozilla/5.0") !== -1) return "Mozilla";

  // 매칭되는 것이 없을 경우
  return "Unknown";
}

위 함수는 getBrowserName()을 호출하면 "IE11", "Chrome", "Firefox" 같은 문자열을 반환합니다.

2. IE 버전 체크 로직 자세히 보기

2-1. Trident 엔진으로 IE 8 ~ 11 구분

IE 8 이상 버전에서는 Trident 렌더링 엔진 버전으로 실제 IE 버전을 구분할 수 있습니다.

  • Trident/7.0 → IE11
  • Trident/6.0 → IE10
  • Trident/5.0 → IE9
  • Trident/4.0 → IE8

코드에서는 다음과 같이 정규식을 이용해 Trident 버전을 추출합니다.

var trident = _ua.match(/Trident\/(\d\.\d)/i);
if (trident !== null) {
  if (trident[1] === "7.0") return "IE11";
  if (trident[1] === "6.0") return "IE10";
  if (trident[1] === "5.0") return "IE9";
  if (trident[1] === "4.0") return "IE8";
}

2-2. IE7 이하 브라우저 구분

그 이전 버전(IE7 등)은 navigator.appName 값이 Microsoft Internet Explorer 인지를 체크해서 구분합니다.

if (navigator.appName === "Microsoft Internet Explorer") {
  return "IE7";
}

현재는 IE 자체가 공식적으로 지원 종료되었지만, 레거시 사내 시스템을 유지하는 경우 이런 방식으로 분기 처리가 남아 있는 경우가 많습니다.

3. 크롬, 파이어폭스 등 다른 브라우저 구분

IE가 아닌 나머지 브라우저는 userAgent 문자열에 포함된 키워드를 이용해서 간단하게 구분합니다.

var agt = _ua.toLowerCase();

if (agt.indexOf("chrome") !== -1) return "Chrome";
if (agt.indexOf("opera") !== -1) return "Opera";
if (agt.indexOf("firefox") !== -1) return "Firefox";
if (agt.indexOf("safari") !== -1) return "Safari";
// 그 외 Star Office, WebTV, Netscape 등도 순서대로 체크

실무에서는 대부분 Chrome / Edge / Firefox / Safari 정도만 체크하면 충분하지만, 위 예제처럼 다양한 브라우저 이름을 구분하도록 확장할 수도 있습니다.

4. 사용 예시: 브라우저에 따라 코드 분기 처리

이제 실제 코드에서 브라우저 이름에 따라 분기 처리를 해보겠습니다.

var browser = getBrowserName();

if (browser.indexOf("IE") === 0) {
  // IE 전용 코드
  console.log("현재 브라우저는 Internet Explorer 계열입니다: " + browser);
  // 예: 폴리필 로딩, IE 전용 CSS 적용 등
} else if (browser === "Chrome") {
  console.log("Chrome 브라우저입니다.");
} else if (browser === "Firefox") {
  console.log("Firefox 브라우저입니다.");
} else {
  console.log("기타 브라우저: " + browser);
}

이렇게 감싸두면 프로젝트 전역에서 getBrowserName() 한 함수만 호출해 브라우저 구분을 처리할 수 있습니다.

5. userAgent 기반 브라우저 체크 시 주의사항

마지막으로, userAgent 기반 체크를 사용할 때 꼭 알아둬야 할 점들이 있습니다.

  • 1) userAgent 문자열은 언제든지 변경될 수 있음
    브라우저 벤더가 정책을 바꾸면 문자열 구조가 달라질 수 있습니다.
  • 2) Edge(크로미움)처럼 Chrome과 비슷한 문자열을 가지는 브라우저 존재
    요즘 브라우저들은 Chrome 토큰을 같이 포함하는 경우가 많아서 단순 포함 여부만으로는 정확한 구분이 어려울 수 있습니다.
  • 3) 가능한 경우, 기능(Feature) 기반 체크를 우선
    예를 들어 fetch 지원 여부, flexbox 지원 여부를 직접 체크하는 방법이 더 안정적입니다.
  • 4) 그래도 레거시 IE 분기에는 여전히 유용
    사내 레거시 프로젝트처럼 “IE만 예외 처리”해야 하는 경우, 위와 같은 IE 버전 체크 로직은 여전히 실무에서 사용됩니다.

6. 정리

  • navigator.userAgent를 사용하면 브라우저 종류와 IE 버전을 어느 정도까지 구분할 수 있습니다.
  • IE8 ~ IE11은 Trident 버전으로, IE7 이하는 navigator.appName으로 체크합니다.
  • Chrome, Firefox, Safari 등은 userAgent 문자열에 포함된 키워드로 구분합니다.
  • 신규 프로젝트에서는 가능하면 기능 감지(Feature Detection)를 우선하고, 레거시 호환용으로만 userAgent 체크를 유지하는 것을 추천합니다.

💡 Tip: 레거시 환경에서 브라우저별 버그를 잡거나, IE 전용 코드를 분리하고 싶다면 위 getBrowserName() 함수를 공통 유틸로 두고 활용해 보세요.

댓글

이 블로그의 인기 게시물

Java Servlet Request Parameter 완전 정복 — GET/POST 모든 파라미터 확인 & 디버깅 예제 (Request Parameter 전체보기)

Java Servlet Request Parameter 완전 정복 — GET/POST 모든 파라미터 확인 & 디버깅 예제 Java Servlet Request Parameter 완전 정복 웹 애플리케이션에서 클라이언트로부터 전달되는 Request Parameter 를 확인하는 것은 필수입니다. 이 글에서는 Java Servlet 과 JSP 에서 GET/POST 요청 파라미터를 전체 출력하고 디버깅하는 방법을 다양한 예제와 함께 소개합니다. 1. 기본 예제: getParameterNames() 사용 Enumeration<String> params = request.getParameterNames(); System.out.println("----------------------------"); while (params.hasMoreElements()){ String name = params.nextElement(); System.out.println(name + " : " + request.getParameter(name)); } System.out.println("----------------------------"); 위 코드는 요청에 포함된 모든 파라미터 이름과 값을 출력하는 기본 방법입니다. 2. HTML Form과 연동 예제 <form action="CheckParamsServlet" method="post"> 이름: <input type="text" name="username"><br> 이메일: <input type="email" name="email"><b...

PostgreSQL 달력(일별,월별)

SQL 팁: GENERATE_SERIES로 일별, 월별 날짜 목록 만들기 SQL 팁: GENERATE_SERIES 로 일별, 월별 날짜 목록 만들기 데이터베이스에서 통계 리포트를 작성하거나 비어있는 날짜 데이터를 채워야 할 때, 특정 기간의 날짜 목록이 필요할 수 있습니다. PostgreSQL과 같은 데이터베이스에서는 GENERATE_SERIES 함수를 사용하여 이 작업을 매우 간단하게 처리할 수 있습니다. 1. 🗓️ 일별 날짜 목록 생성하기 2020년 1월 1일부터 12월 31일까지의 모든 날짜를 '1 day' 간격으로 생성하는 쿼리입니다. WITH date_series AS ( SELECT DATE(GENERATE_SERIES( TO_DATE('2020-01-01', 'YYYY-MM-DD'), TO_DATE('2020-12-31', 'YYYY-MM-DD'), '1 day' )) AS DATE ) SELECT DATE FROM date_series 이 쿼리는 WITH 절(CTE)을 사용하여 date_series 라는 임시 테이블을 만들고, GENERATE_SERIES 함수로 날짜를 채웁니다. 결과 (일별 출력) 2. 📅 월별 날짜 목록 생성하기 동일한 원리로, 간격을 '1 MONTH' 로 변경하면 월별 목록을 생성할 수 있습니다. TO...

CSS로 레이어 팝업 화면 가운데 정렬하는 방법 (top·left·transform 완전 정리)

레이어 팝업 센터 정렬, 이 코드만 알면 끝 (CSS 예제 포함) 이벤트 배너나 공지사항을 띄울 때 레이어 팝업(center 정렬) 을 깔끔하게 잡는 게 생각보다 어렵습니다. 화면 크기가 변해도 가운데에 고정되고, 모바일에서도 자연스럽게 보이게 하려면 position , top , left , transform 을 정확하게 이해해야 합니다. 이 글에서는 아래 내용을 예제로 정리합니다. 레이어 팝업(center 정렬)의 기본 개념 자주 사용하는 position: absolute / fixed 정렬 방식 질문에서 주신 스타일 top: 3.25%; left: 50%; transform: translateX(-50%) 의 의미 실무에서 바로 쓰는 반응형 레이어 팝업 HTML/CSS 예제 1. 레이어 팝업(center 정렬)이란? 레이어 팝업(레이어 팝업창) 은 새 창을 띄우는 것이 아니라, 현재 페이지 위에 div 레이어를 띄워서 공지사항, 광고, 이벤트 등을 보여주는 방식을 말합니다. 검색엔진(SEO) 입장에서도 같은 페이지 안에 HTML이 존재 하기 때문에 팝업 안의 텍스트도 정상적으로 인덱싱될 수 있습니다. 즉, “레이어 팝업 센터 정렬”, “레이어 팝업 만드는 방법”과 같이 관련 키워드를 적절히 넣어주면 검색 노출에 도움이 됩니다. 2. 질문에서 주신 레이어 팝업 스타일 분석 질문에서 주신 스타일은 다음과 같습니다. <div class="layer-popup" style="width:1210px; z-index:9001; position:absolute; top:3.25%; left:50%; transform:translateX(-50%);"> 레이어 팝업 내용 <...