====== 요소기술 - 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 파일에