$.browser.msie 가 비어 있 거나 대상 이 아 닌 여러 가지 해결 방법
이 오류 가 발생 한 것 은 jQuery 버 전 을 업 그 레이 드 했 기 때 문 입 니 다.1.9 이전 에서 1.9 로 업 그 레이 드 된 후$.browser.msie 가 1.9 이후 jQuery 에 존재 하지 않 기 때문에 잘못 보 고 했 습 니 다.
jQuery 1.9$.browser 를 제외 한 대체 방법
$.browser 는 정규 표현 식 을 통 해 userAgent 와 일치 하여 브 라 우 저 버 전과 종 류 를 판단 하 는.jquery 1.3.2 버 전의 문서 에서 jquery.browser 및 jquery.browser.version 은 버 리 는 것 을 권장 합 니 다.jquery.support 로 대체 할 수 있 습 니 다.
jQuery 는 1.9 버 전부터$.browser 와$.browser.version 을 제 거 했 고 대신$.support 를 제 거 했 습 니 다.업 데 이 트 된 2.0 버 전에 서 는 IE 6/7/8 을 지원 하지 않 습 니 다.이후 사용자 가 IE 6/7/8 을 지원 해 야 할 경우 jQuery 1.9 또는 jQuery 1.10.1 등 만 사용 할 수 있다.IE 를 전면적으로 지원 하고 jQuery 1.9 와 2.0 을 혼합 사용 하려 면 공식 적 인 해결 방안 은 다음 과 같다.
해결 방법 1:
<!--[if lt IE 9]>
<script src='/jquery-1.10.1.min.js'></script>
<![endif]-->
<!--[if gte IE 9]>
<script src='/jquery-2.0.2.min.js'></script>
<![endif]-->
해결 방법 2:$.browser.msie 로 판단 하지 말고 인터넷 에서 직접 바 꿀 수 있 는 해결 방법 을 찾 았 다.
$.browser.mozilla = /firefox/.test(navigator.userAgent.toLowerCase());
$.browser.webkit = /webkit/.test(navigator.userAgent.toLowerCase());
$.browser.opera = /opera/.test(navigator.userAgent.toLowerCase());
$.browser.msie = /msie/.test(navigator.userAgent.toLowerCase());
등호 뒤의 표현 식 은 true/false 를 되 돌려 줍 니 다.원래 의$.browser.msie 등 을 직접 바 꿀 수 있 습 니 다.IE6 인지 확인 하기:
// Old
if ($.browser.msie && 7 > $.browser.version) {}
// New
if ('undefined' == typeof(document.body.style.maxHeight)) {}
IE 6-8 인지 확인 하기:$.support.leadingWhitespace 는 IE 에서 특유 한 속성 이기 때문에$.support.leadingWhitespace 를 이용 하여 브 라 우 저가 IE6-8 인지 아 닌 지 를 판단 할 수 있 습 니 다.
코드 1
if (!$.support.leadingWhitespace) {}
부호 2
$(function($){
var ieFlag= $.support.leadingWhitespace;// IE8
if(!ieFlag){//IE8
//IE
}else{
//
}
});
해결 방법/*이후 발 견 된 브 라 우 저 유형 유 니 버 설 타 입 판단*/외국인 이 쓴 글 은 IE,Firefox,Google 에서 직접 테스트 할 수 있 습 니 다.
원문 주소:http://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser
// Firefox 1.0+
var isFirefox = typeof InstallTrigger !== 'undefined';
alert("isFirefox:"+isFirefox);
// Opera 8.0+
var isOpera = (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
alert("isOpera:"+isOpera);
// Safari <= 9 "[object HTMLElementConstructor]"
var isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0;
alert("isSafari:"+isSafari);
// Internet Explorer 6-11
var isIE = /*@cc_on!@*/ false || !!document.documentMode;
alert("isIE:"+isIE);
// Edge 20+
var isEdge = !isIE && !!window.StyleMedia;
alert("isEdge:"+isEdge);
// Chrome 1+
var isChrome = !!window.chrome && !!window.chrome.webstore;
alert("isChrome:"+isChrome);
// Blink engine detection(7)
var isBlink = (isChrome || isOpera) && !!window.CSS;
alert("isBlink:"+isBlink);
해결 방법 4:최근 한 항목 의 jQuery 를 최신 버 전 으로 업그레이드 하 였 는데,일부 페이지 는 다음 과 같은 오 류 를 보고 하 였 다.
Cannot read property 'msie' of undefined
jQuery 사이트 에서 찾 아 봤 는데$.browser 라 는 api 는 jQuery 1.9 부터 본 격 적 으로 폐지 되 었 기 때 문 입 니 다.js 코드 에$.browser 만 사용 하면 이 오 류 를 보고 할 수 있 습 니 다.구체 적 인 설명 은 참조jQuery 공식 설명.
건물 주 는 확장 해서 읽 어 보 니 jQuery 1.9 가 이전 버 전에 deprecated 라 고 표 시 된 api 를 모두 정식으로 삭제 하고 뒤로 호 환 되 지 않 는 것 을 발견 했다.최신 jQuery 로 업 그 레이 드 된 어린이 신발 의 경우 코드 업 그 레이 드 를 새로운 api 로 사용 하거나 삭제 되 는 방법 을 따로 실현 하 는 데 시간 이 걸 린 다 는 뜻 이다.다행히도 jQuery 팀 은 이 break change 가 가 져 온 여러 가지 불편 함 을 깨 닫 고 jQuery Migrate 플러그 인 을 출시 하여 최신 버 전에 서 폐 기 된 API 를 자동 으로 복구 할 수 있 도록 했다.이 플러그 인 을 참조 하면 기 존의 js 코드 는 변경 하지 않 아 도 최신 jQuery 라 이브 러 리 와 함께 정상적으로 실 행 될 수 있 습 니 다.
다음은 구체 적 인 해결 방법 입 니 다.먼저 jQuery Migrate 플러그 인 을 다운로드 한 다음 jQuery js 를 참조 한 곳 에 jQuery Migrate js 파일 에 대한 인용 을 추가 하면 됩 니 다.
<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>
jQuery Migrate 로 해결 하 는 방법 은 간단 하고 머리 가 없 지만 추가 적 인 js 라 이브 러 리 를 추가 할 수 있 습 니 다.추가 js 라 이브 러 리 를 추가 하 는 것 을 좋아 하지 않 는 어린이 신발 에 대해 서 는 jQuery 파일 이후$.browser 코드 를 불 러 오기 전에 주의 하 십시오.
jQuery.browser={};(function(){jQuery.browser.msie=false; jQuery.browser.version=0;if(navigator.userAgent.match(/MSIE ([0-9]+)./)){ jQuery.browser.msie=true;jQuery.browser.version=RegExp.$1;}})();
이상 은 우리 소 편 이 정리 한 해결 방법 입 니 다.여러분 은 프로젝트 의 수요 에 따라 비교적 간단 한 것 을 선택 할 수 있 습 니 다.