javascript showModalDialog 에서 window.open 시 session 이슈

2017.01.05 16:54language/javascript

javascript showModalDialog 에서 window.open 시 session 이슈

 

 

특정 페이지에서 showModalDialog 로 창을 열고 여기에서 다시 window.open 을 호출하면 session 이 사라지는 현상이 있다.

 

 



 

전에 알아둬야 할 점.

 

showModalDialog 는 웹 표준에서 Deprecated 되었다.

 

언제든지 종료될 수 있고 브라우저들이 이 기능을 제거하고 있는 추세이다.

 

 

 

출처 : https://developer.mozilla.org/en-US/docs/Web/API/Window/showModalDialog

 

 

 

 

구글링해보면 session 이 사라지는 현상은 IE6은 빈번히 일어났던것 같고 IE7, IE8, IE9는 간헐적으로 일어나는듯 하다.

 

IE의 불안정함 때문에 잘 되다가도 안될 수 있다.

 

컴퓨터 재부팅이나 IE 브라우저를 다시 실행하는 것만으로도 해결되는 경우도 있다.

 



 

왜 session 이 사라지는건가 ?

 

ModalDialog 에서 window.open을 하게 되면 도메인이 다른 새로운 창으로 인식해 세션을 공유할수 없다는 의견이 가장 많았다.

 

 

 

일단 IE6에서 증상은 공식적으로 이슈가 되었고 해결방법도 나와있다.

 

https://support.microsoft.com/en-us/kb/831678

 

Windows XP가 종료되면서 IE8 이하는 신경안써도 되는줄 알았더니 IE9에서 증상이 나타나네...

 

더이상의 공식적인 문서는 찾지 못했기 때문에 위 링크를 토대로 해결방법을 정리해본다.

 

 

 

window.open 으로 부모창을 제어하기 위해서 opener 를 사용한다.

 

opener 처럼 showModalDialog 에서 부모창을 제어하기 위해서는 dialogArguments 를 사용해야 한다.

 

dialogArguments 사용하면 부모창의 엘리먼트 등에 접근이 가능하다.

 

dialogArguments 를 사용하려면 showModalDialog 시 window 객체를 넘겨주어야 한다.

 

dialogArguments 를 사용하여 window.open 을 하면 된다.

 

 

* 사용 방법

 

main.html

1
2
3
4
5
6
7
8
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
 </HEAD>
 <BODY>
  <input type='button' value='showModalDailog' onclick='window.showModalDialog("modal.html", window)'>
 </BODY>
</HTML>
cs

 

 

modal.html

1
2
3
4
5
6
7
8
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
 </HEAD>
 <BODY>
  modal dialog <input type='button' value='popup' onclick='window.dialogArguments.window.open("popup.html")'>
 </BODY>
</HTML>
cs

 

popup.html

1
2
3
4
5
6
7
8
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
 </HEAD>
 <BODY>
  popup page
 </BODY>
</HTML>
cs

 

근데 이 방법이 최선인가 ... ?????????????????????????

 

끝 ~