가우스(Gauce) 가 IE11 에서 this.function 으로 작성된 함수가
동적 이벤트로 적용이 안되는 문제가 있다.
IE10 이하에서는 그대로 this.close, this.viewError 함수를 사용하고
IE11 에서는 obj_close(), obj_view_error() 함수를 사용하도록
동적 이벤트로 적용하였다.
// 내용의 값을 빈공백을 trim하기 위한것(앞/뒤) var TRIM_PATTERN = /(^\s*)|(\s*$)/g; String.prototype.trim = function() { return this.replace(TRIM_PATTERN, ""); } var DS_CLSID = "CLSID:xxxx"; // 데이터셋 var TR_CLSID = "CLSID:xxxx"; // 트랜젝션 var UNI_DS_CLSID = "CLSID:xxxx"; // 유니코드 데이터셋 var UNI_TR_CLSID = "CLSID:xxxx"; // 유니코드 트랜젝션 var GLB_SUBMIT_STATUS = false; // reset/post 중복방지. var GLO_OBJECT = document.all; var GLO_INTERVAL = ""; var GLO_TEMP_OBJECT = ""; var GLS_CALLBACK = ""; // 트랜젝션 및 조회후에 실행될 CallBack함수 var TOP_PX = 0; var LEFT_PX = 0; var TARGET_DIV = ''; var ds_html = '<center><table cellpadding=0 cellspacing=0><tr><td>' + '<img src="/img/common/ing01.gif"></td></tr></table></center>'; var tr_html = '<center><table cellpadding=0 cellspacing=0><tr><td>' + '<img src="/img/common/ing02.gif"></td></tr></table></center>'; function obj_close() { GLB_SUBMIT_STATUS = false; try { GLO_OBJECT.oProgressBar.outerHTML = ""; } catch(exception) {} for (i=0; i<GLO_OBJECT.length; i++) { try { if (GLO_OBJECT[i].type.toUpperCase() == "BUTTON") { GLO_OBJECT[i].disabled = false; } } catch (exception) {} } // 이벤트를 제거하여 준다. if ( GLO_TEMP_OBJECT.classid.toUpperCase() == DS_CLSID || GLO_TEMP_OBJECT.classid.toUpperCase() == UNI_DS_CLSID ) { // 데이터셋. GLO_TEMP_OBJECT.removeEventListener ('OnLoadCompleted', obj_close, false); GLO_TEMP_OBJECT.removeEventListener ('OnLoadError', obj_view_error, false); } else if ( GLO_TEMP_OBJECT.classid.toUpperCase() == TR_CLSID || GLO_TEMP_OBJECT.classid.toUpperCase() == UNI_TR_CLSID ) { // 트랜젝션. GLO_TEMP_OBJECT.removeEventListener ('OnSuccess', obj_close, false); GLO_TEMP_OBJECT.removeEventListener ('OnFail', obj_view_error, false); } try { if (GLS_CALLBACK != "") { eval(GLS_CALLBACK); } } catch(exception) {} } function obj_view_error() { GLB_SUBMIT_STATUS = false; GLO_OBJECT.oProgressBar.outerHTML = ""; for (i=0; i<GLO_OBJECT.length; i++) { try { if (GLO_OBJECT[i].type.toUpperCase() == "BUTTON") { // GLO_OBJECT[i].disabled = false; } } catch (exception) {} } /************************************************************************* * 프로젝트별로 커스터 마이징이 필요한 부분 ************************************************************************* * 서비스 실행시 오류가 발생한 경우 해당 오류를 출력해 준다. * 이부분에서 서비스에서 넘어온 Exception타입에 따라 Biz, SysException등에 * 따라 팝업창, alert유형등으로 처리해 주면 된다. *************************************************************************/ // 세션아웃 if(GLO_TEMP_OBJECT.SrvErrCode('SessionOutException',0) == "SO0001") { sessionOutRedirect(); } else { //alert(GLO_TEMP_OBJECT.ErrorMsg); //alert('오류가 발생하였습니다.'); } // 이벤트를 제거하여 준다. if ( GLO_TEMP_OBJECT.classid.toUpperCase() == DS_CLSID || GLO_TEMP_OBJECT.classid.toUpperCase() == UNI_DS_CLSID ) { // 데이터셋. GLO_TEMP_OBJECT.removeEventListener ('OnLoadCompleted', obj_close); GLO_TEMP_OBJECT.removeEventListener ('OnLoadError', obj_view_error); } else if ( GLO_TEMP_OBJECT.classid.toUpperCase() == TR_CLSID || GLO_TEMP_OBJECT.classid.toUpperCase() == UNI_TR_CLSID ) { // 트랜젝션. GLO_TEMP_OBJECT.removeEventListener ('OnSuccess', obj_close); GLO_TEMP_OBJECT.removeEventListener ('OnFail', obj_view_error); } } /*********************************************************************************************** * 가우스를 사용시 프로그래스(조회중, 처리중)을 표시해주는 오브젝트 *********************************************************************************************** * usage : var rs = new Progress(); // 객체 생성. * rs.submit(데이터셋오브젝트, x좌표, y좌표); // 데이터셋을 통한 조회시 * rs.submit(트랜젝션오브젝트, x좌표, y좌표); // 트랜젝션 처리시 * rs.submit(트랜젝션오브젝트, "R", x좌표, y좌표); // 트랜젝션 컴포넌트로 조회시 ***********************************************************************************************/ function Progress() { /** MAX 컴포넌트 기준으로 작성됨 :: 유니코드인 경우 해당 CLSID로 변경해 주면 된다. **/ // 정상적으로 실행된 경우 메시지 출력 및 프로그래스 제거. this.close = function() { GLB_SUBMIT_STATUS = false; try { GLO_OBJECT.oProgressBar.outerHTML = ""; } catch(exception) {} for (i=0; i<GLO_OBJECT.length; i++) { try { if (GLO_OBJECT[i].type.toUpperCase() == "BUTTON") { GLO_OBJECT[i].disabled = false; } } catch (exception) {} } if ( GLO_TEMP_OBJECT.classid.toUpperCase() == DS_CLSID || GLO_TEMP_OBJECT.classid.toUpperCase() == UNI_DS_CLSID ) { // 데이터셋. GLO_TEMP_OBJECT.detachEvent ('OnLoadCompleted', EVENT_CLOSE); GLO_TEMP_OBJECT.detachEvent ('OnLoadError', EVENT_VIEW_ERROR); } else if ( GLO_TEMP_OBJECT.classid.toUpperCase() == TR_CLSID || GLO_TEMP_OBJECT.classid.toUpperCase() == UNI_TR_CLSID ) { // 트랜젝션. GLO_TEMP_OBJECT.detachEvent ('OnSuccess', EVENT_CLOSE); GLO_TEMP_OBJECT.detachEvent ('OnFail', EVENT_VIEW_ERROR); } try { if (GLS_CALLBACK != "") { eval(GLS_CALLBACK); } } catch(exception) {} } /** 에러가 발생한 경우 에러를 표시 및 프로그래스바를 제거 **/ this.viewError = function() { GLB_SUBMIT_STATUS = false; GLO_OBJECT.oProgressBar.outerHTML = ""; for (i=0; i<GLO_OBJECT.length; i++) { try { if (GLO_OBJECT[i].type.toUpperCase() == "BUTTON") { //GLO_OBJECT[i].disabled = false; } } catch (exception) {} } /************************************************************************* * 프로젝트별로 커스터 마이징이 필요한 부분 ************************************************************************* * 서비스 실행시 오류가 발생한 경우 해당 오류를 출력해 준다. * 이부분에서 서비스에서 넘어온 Exception타입에 따라 Biz, SysException등에 * 따라 팝업창, alert유형등으로 처리해 주면 된다. *************************************************************************/ // 세션아웃 if(GLO_TEMP_OBJECT.SrvErrCode('SessionOutException',0) == "SO0001") { sessionOutRedirect(); } else { //alert(GLO_TEMP_OBJECT.ErrorMsg); //alert('오류가 발생하였습니다.'); } // 이벤트를 제거하여 준다. if ( GLO_TEMP_OBJECT.classid.toUpperCase() == DS_CLSID || GLO_TEMP_OBJECT.classid.toUpperCase() == UNI_DS_CLSID ) { // 데이터셋. GLO_TEMP_OBJECT.detachEvent ('OnLoadCompleted', EVENT_CLOSE); GLO_TEMP_OBJECT.detachEvent ('OnLoadError', EVENT_VIEW_ERROR); } else if ( GLO_TEMP_OBJECT.classid.toUpperCase() == TR_CLSID || GLO_TEMP_OBJECT.classid.toUpperCase() == UNI_TR_CLSID ) { // 트랜젝션. GLO_TEMP_OBJECT.detachEvent ('OnSuccess', EVENT_CLOSE); GLO_TEMP_OBJECT.detachEvent ('OnFail', EVENT_VIEW_ERROR); } } /** * 조회 및 트랜젝션 수행후에 실행될 JavaScript 함수 **/ this.setCallBack = function(param) { GLS_CALLBACK = param; } // 실제 reset/post수행 this.submit = function() { /** 중복 처리를 막기 위해 처리한 부분 **/ if (GLB_SUBMIT_STATUS == true) { /*alert("처리중입니다.\n잠시만 기다려 주십시오.");*/ return; } GLB_SUBMIT_STATUS = true; if (arguments.length == 1) { try { GLO_TEMP_OBJECT = arguments[0]; } catch (exception) { try { GLO_OBJECT.oProgressBar.style.top = arguments[0]; } catch (exception) {} } this.create(GLO_TEMP_OBJECT); } else if (arguments.length == 2) { try { GLO_TEMP_OBJECT = arguments[0]; TARGET_DIV = arguments[1]; } catch (exception) { try { GLO_OBJECT.oProgressBar.style.top = arguments[0]; } catch (exception) {} } this.create(GLO_TEMP_OBJECT, arguments[1]); } if (check_id_version() > 10) { if ( GLO_TEMP_OBJECT.classid.toUpperCase() == DS_CLSID || GLO_TEMP_OBJECT.classid.toUpperCase() == UNI_DS_CLSID ) { // 데이터셋. AttachIE11Event(GLO_TEMP_OBJECT, "OnLoadCompleted", obj_close); AttachIE11Event(GLO_TEMP_OBJECT, "OnLoadError", obj_view_error); } else if ( GLO_TEMP_OBJECT.classid.toUpperCase() == TR_CLSID || GLO_TEMP_OBJECT.classid.toUpperCase() == UNI_TR_CLSID ) { // 트랜젝션 오브젝트. AttachIE11Event(GLO_TEMP_OBJECT, "OnSuccess", obj_close); AttachIE11Event(GLO_TEMP_OBJECT, "OnFail", obj_view_error); } else { alert("가우스 데이터셋/트랜젝션 컴포넌트가 아닙니다.\n데이터셋/트랜젝션 컴포넌트를 사용해 주세요."); } } else if (GLO_TEMP_OBJECT.attachEvent) { if ( GLO_TEMP_OBJECT.classid.toUpperCase() == DS_CLSID || GLO_TEMP_OBJECT.classid.toUpperCase() == UNI_DS_CLSID ) { // 데이터셋. GLO_TEMP_OBJECT.attachEvent ('OnLoadCompleted', EVENT_CLOSE); GLO_TEMP_OBJECT.attachEvent ('OnLoadError', EVENT_VIEW_ERROR); } else if ( GLO_TEMP_OBJECT.classid.toUpperCase() == TR_CLSID || GLO_TEMP_OBJECT.classid.toUpperCase() == UNI_TR_CLSID ) { // 트랜젝션 오브젝트. GLO_TEMP_OBJECT.attachEvent ('OnSuccess', EVENT_CLOSE); GLO_TEMP_OBJECT.attachEvent ('OnFail', EVENT_VIEW_ERROR); } else { alert("가우스 데이터셋/트랜젝션 컴포넌트가 아닙니다.\n데이터셋/트랜젝션 컴포넌트를 사용해 주세요."); } } try { GLO_OBJECT.oProgressBar.style.visibility="visible"; } catch (exception) {} GLO_INTERVAL = window.setInterval(this.progress,300); } this.create = function() { var progress = '<iframe width="255px" height="65px" id=oProgressBar style="position:absolute;visibility:hidden;width:255px;height:65px;" marginwidth="0" marginheight="0" scrolling="no" frameborder=0></iframe>'; var doc = null; if(TARGET_DIV != '') { $('.'+TARGET_DIV).each(function(){ this.insertAdjacentHTML("beforeEnd", progress); doc = oProgressBar.document; LEFT_PX = ($(this).width()-255)/2; TOP_PX = ($(this).height()-65)/2; return false; }); } else { $('.grid, .pop_grid, .pop_main').each(function(){ this.insertAdjacentHTML("beforeEnd", progress); doc = oProgressBar.document; LEFT_PX = ($(this).width()-255)/2; TOP_PX = ($(this).height()-65)/2; return false; }); } if (doc == null) { /*alert("HTML Document에 loading 이미지를 나타낼 태그가 없습니다.");*/ return; } doc.open("text/html"); try { if ( GLO_TEMP_OBJECT.classid.toUpperCase() == DS_CLSID || GLO_TEMP_OBJECT.classid.toUpperCase() == UNI_DS_CLSID ) { // 데이터셋. doc.write(ds_html); } else if ( GLO_TEMP_OBJECT.classid.toUpperCase() == TR_CLSID || GLO_TEMP_OBJECT.classid.toUpperCase() == UNI_TR_CLSID ) { // 트랜젝션 오브젝트. if(arguments[1] == "R") { doc.write(ds_html); } else { doc.write(tr_html); } } } catch (exception) { doc.write(tr_html); } doc.close(); /** 파라미터에 따라 처리 하는 부분 **/ try { GLO_OBJECT.oProgressBar.style.zIndex = 0; if (arguments.length==3) { GLO_OBJECT.oProgressBar.style.left = arguments[1]; GLO_OBJECT.oProgressBar.style.top = arguments[2]; } else if (arguments.length == 4) { GLO_OBJECT.oProgressBar.style.left = arguments[2]; GLO_OBJECT.oProgressBar.style.top = arguments[3]; } else { GLO_OBJECT.oProgressBar.style.left = 490; GLO_OBJECT.oProgressBar.style.top = 200; $('#oProgressBar').css({top:TOP_PX+'px',left:LEFT_PX+'px'}); } } catch (exception) { /*alert("처리중입니다.\n잠시만 기다려 주십시오.");*/ return; } } this.progress = function() { for (i=0; i<GLO_OBJECT.length; i++) { try { if (GLO_OBJECT[i].type.toUpperCase() == "BUTTON") { GLO_OBJECT[i].disabled = true; } } catch (exception) {} } window.clearInterval(GLO_INTERVAL); try { if ( GLO_TEMP_OBJECT.classid.toUpperCase() == DS_CLSID || GLO_TEMP_OBJECT.classid.toUpperCase() == UNI_DS_CLSID ) { // 데이터셋. GLO_TEMP_OBJECT.reset(); } else if ( GLO_TEMP_OBJECT.classid.toUpperCase() == TR_CLSID || GLO_TEMP_OBJECT.classid.toUpperCase() == UNI_TR_CLSID ) { // 트랜젝션 오브젝트. GLO_TEMP_OBJECT.post(); } } catch (exception) { document.form1.submit(); } } /** 이벤트 ref변수 **/ var EVENT_VIEW_ERROR = this.viewError; var EVENT_CLOSE = this.close; }
'WEB' 카테고리의 다른 글
가우스 이벤트 동적 생성시 기존 이벤트 추가 (0) | 2016.02.12 |
---|---|
[JSP] JSP, JSTL 에서 if .. else 문 (0) | 2016.02.12 |
IE11 에서의 attachEvent (0) | 2016.02.12 |
Internet Explorer 11을 7,8,9,10 버전으로 인식시키는 방법 (0) | 2016.02.12 |
[JavaScript] 콤마 추가 및 삭제 (0) | 2016.02.12 |