반응형

가우스(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;

}

반응형