JQuery.browser 삭제 – browser detection 문제

Photo Gallery를 만들면서 browser detection을 위해 $.browser를 이용해서 처리하고 있었다. 그런데 알고보니 $.browser가 browser detection에서 문제가 있을 수 있어서 jQuery 1.9에서는 삭제되었다고 한다.

 $.browser: Ever since jQuery 1.4, we’ve been evangelizing that browser detection via the user agent string is a bad idea. Yet we’ve been an enabler of bad practice by continuing to offer $.browser. As of jQuery 1.9 we’ll remove it entirely and you’ll need to use the 1.9 compat plugin. If your code isn’t weaned off browser detection yet, check out Modernizr for a very thorough set of feature detections you can use instead. And of course, you’re welcome to read the tea leaves in the navigator.userAgent string directly, there’s nothing stopping you but your conscience.

한국으로 이사하면서 2~3주 정신 없는 와중에 언제 반영되었는지 모르겠지만, $.browser가 undefined로 처리되는 에러 때문에 사이트가 정상적으로 동작하지 않는 문제를 이제서야 발견하고 원인을 찾아보니 위와 같은 문제가 있었다. JQuery에서는 $.support를 이용하거나 별도의 plugin을 추천한다고 되어 있었지만, 좀 더 확실하게 처리하고자 ‘Javascript : The Definitive Guide’에서 browser detection을 처리하는 함수를 찾아서 적용하였다. 함수는 다음과 같다.

//browser detect
var browser = (function() {
    var s = navigator.userAgent.toLowerCase();
    var match = /(webkit)[ \/](\w.]+)/.exec(s) ||
                /(opera)(?:.*version)?[ \/](\w.]+)/.exec(s) ||
                /(msie) ([\w.]+)/.exec(s) ||
               !/compatible/.test(s) && /(mozilla)(?:.*? rv:([\w.]+))?/.exec(s) ||
               [];
    return { name: match[1] || "", version: match[2] || "0" };
}());

당연히 위 함수는 사용하기 전에 선언되어야 하며 if (browser.name == ‘msie’) {…} 와 같이 사용하면 된다.

One thought on “JQuery.browser 삭제 – browser detection 문제

Leave a Reply

Your email address will not be published. Required fields are marked *