====== 요소기술 - showModalDialog 대체 기능 ====== ===== 개요 ===== JavaScript의 Modal 방식의 dialog를 지원하는 windows.showModalDialog의 기능이 chrome 37 버전부터 지원하지 않음에 따라 대체 기능을 제공한다. ===== 설명 ===== showModalDialog 대체 기능은 기존 showModalDialog 함수를 그대로 사용할 수 있도록 처리되었으면, 파라미터 전달 및 return 전달에 필요한 경우 추가적인 함수만을 호출하도록 제공된다. == 관련소스 == ^유형^대상소스^설명^비고^ |js|/js/egovframework/com/cmm/showModalDialog.js|기존 showModalDialog 대체 기능 제공| showModalDialog() 함수를 호출하는 페이지에 필요 | |js|/js/egovframework/com/cmm/showModalDialogCallee.js|기존 showModalDialog 대체 기능 제공| 팝업으로 호출되는 페이지에 필요 | {{:egovframework:com:v3:cmm:showmodaldialog.zip|}} ===== 환경설정 ===== **해당 없음** ===== 사용방법 ===== ==== 1. 본 화면(opener) JSP 상에 javascript 포함 ==== 혹, 공통된 형태로 js 상에 기능을 제공하는 경우는 6번 항목 참조한다. ==== 2. 호출된 팝업화면 JSP 상에 javascript 포함 ==== ==== 3. 팝업 화면 상에서 "window.dialogArguments" 처리 ==== 팝업 화면 상에서 본 화면에서 넘기는 argument를 "window.dialogArguments"를 통해 가져오는 경우 다음과 같이 수정 필요 * 기존 var varParam = window.dialogArguments; * 변경 getDialogArguments(); var varParam = window.dialogArguments; ==== 4. 본 화면 (opener) 상으로 결과를 넘기기 위해 "window.returnValue" 처리 ==== 팝업 화면 상에서 본 화면으로 "window.returnValue = retVal" 형태로 결과를 넘기는 경우 다음과 같이 수정 필요 * 기존 parent.window.returnValue = retVal; parent.window.close(); * 변경 setReturnValue(retVal); parent.window.returnValue = retVal; parent.window.close(); ==== 5. 본 화면 (opener) 상으로 넘어온 결과를 처리하는 부분 ==== 본 화면 상에서 팝업으로부터 데이터를 가져와 처리하는 부분은 다음과 같이 showModalDialogCallback() function 정의 필요 function showModalDialogCallback(retVal) { if (retVal) { alert('retVal = ' + retVal); } } 위 showModalDialogCallback function에는 기존 showModalDialog에서 리턴된 값을 처리하는 부분을 지정함 다만, 기존에 사용되는 변수 등의 값이 전달되지 않기 때문에 전역변수로 선언된 otherParameters 배열 변수를 다음과 같이 활용 할 수 있음 * 기존 function fn_caller(frm, sDate, vDate) { retVal = window.showModalDialog(url, varParam, openParam); if (retVal) { if(fn_egov_NormalCalendar.arguments.length == 2){ sDate.value = retVal.vDate; }else{ sDate.value = retVal.sDate; vDate.value = retVal.vDate; } } } * 변경 function fn_caller(frm, sDate, vDate) { retVal = window.showModalDialog(url, varParam, openParam); otherParameters[0] = fn_egov_NormalCalendar.arguments.length; otherParameters[1] = sDate; otherParameters[2] = vDate; if (retVal) { if(fn_egov_NormalCalendar.arguments.length == 2){ sDate.value = retVal.vDate; }else{ sDate.value = retVal.sDate; vDate.value = retVal.vDate; } } } function showModalDialogCallback(retVal) { if (retVal) { if (otherParameters[0] == 2) { otherParameters[1].value = retVal.vDate; } else { otherParameters[1].value = retVal.sDate; otherParameters[2].value = retVal.vDate; } } } ==== 6. 공통 js 파일을 통해 처리하는 경우 js 파일 처리 ==== 공통 js를 통해 공통 기능이 제공되는 경우 원 js 파일에 대하여 다음과 처리하면 개별 JSP 파일에