일부 Internet Explorer에서 Modal 창에서 window.open시 session이 끊기는 문제가 발생한다.
[원인]
구글링 결과 ModalDialog에서 window.open을 하면 도메인이 다른 새로운 창으로 인식해서 세션을 공유할 수 없어서 해당 문제가 발생하는 것이라한다.
show.ModalDialog window.open
A page ------------------------------> B popup page -------------------X---------> C popup page
일부 IE에서 세션 끊김
[해결방안]
이때, 아래와 같이 B page 에서 window.dialogArguments를 통해서 A page(부모창)에 접근하고
window.dialogArguments.window.open 과 같이 팝업을 열면 A page에서 C page를 여는게 되어서
session이 끊기지 않고 호출된다.
show.ModalDialog
A page -----------------------------> B popup page
window.dialogArguments.window.open
----------------------------------------------------------------------------------------------------------------------> C popup page
하지만 이렇게 하면 C page에서 부모창은 A page이기 때문에 B페이지에 접근하기 위해서는 별도의 조치가 필요하다.
그래서 C페이지에서 B페이지로 접근하기 위해서 window.dialogArguments.window 를 통해서 A 페이지의 window 객체에 접근해
B페이지의 window 객체를 넘겨준다.
C 페이지에서는 window.opener를 통해 A 페이지에 접근하고 B페이지에서 C페이지를 열때 A페이지의 window 객체에 등록해 놓은 parentsPopWIndow 값을 통해 B 페이지에 접근한다.
예를들어 C 페이지에서 B 페이지에 있는 함수 fn_setData(data)에 접근하고자 한다면, 아래와 같이 작성할 수 있다.
window.opener.parentsPopWindow.fn_setData(data);
show.ModalDialog
A page -----------------------------> B popup page
window.dialogArguments.window.open
----------------------------------------------------------------------------------------------------------------------> C popup page
v A 페이지의 window.parentsPopWIndow = B 페이지의 window
window.opener
<----------------------------------------------------------------------------------------------------------------
window.opener.parentsPopWindow
----------------------------->
나는 해당 문제가 여러 jsp에 공통으로 import하는 js에서 발생했는데, modal창에서 window.open시에만 해당 에러가 발생해서
function내부에 modal창인지 확인하고 modal창일 경우에는 다른 방법으로 팝업을 여는 방식으로 문제를 해결했다.
'개발 > javascript' 카테고리의 다른 글
[javascript] 원시타입과 객체 Boolean으로 변환 (0) | 2023.01.01 |
---|---|
ECMAScript 2015(ES6) (0) | 2022.12.30 |
[npm] 패키지 관리 (2) | 2022.12.23 |
[javascript] RGBA ↔ HEX 변환 (0) | 2021.01.12 |
[javascript] javascript란? #정의 #역사 (0) | 2019.02.02 |