2017. 1. 5. 16:54ㆍlanguage/javascript
특정 페이지에서 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 |
근데 이 방법이 최선인가 ... ?????????????????????????
끝 ~
'language > javascript' 카테고리의 다른 글
javascript onbeforeunload 오작동 / 버그 (0) | 2017.06.29 |
---|---|
javascript encoding url / url encode decode 하기 / javascript 한글 깨짐 (0) | 2017.06.28 |
javascript 프로그레스바 / 로딩바 플러그인 (0) | 2017.05.29 |
html2canvas 적용 시 table border 안나오는 문제 (4) | 2017.03.13 |
JSP 페이지 이미지로 저장, 웹페이지 이미지로 저장, 페이지 이미지 캡쳐 (12) | 2017.03.13 |
javascript 중복 submit 방지 / 다중 클릭 방지 / 중복 클릭 방지 (16) | 2016.12.09 |
dwr 에서 request, session 사용하기 / WebContextFactory is deprecated (0) | 2016.12.08 |
javascript | 모바일 브라우저 userAgent로 디바이스 구분하기 / android ios 구분하기 (0) | 2016.08.10 |
javascript 계산기 / 자바스크립트 계산기 만들기 (2) | 2016.06.28 |
javascript history 삭제 / href replace 비교 (4) | 2016.06.01 |