개발/javascript

[javascript] ModalDialog에서 window.open시 session 끊기는 문제

smile-haha 2019. 1. 23. 21:31
반응형

일부 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 객체를 넘겨준다.


window.dialogArguments.window.parentsPopWIndow = 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창일 경우에는 다른 방법으로 팝업을 여는 방식으로 문제를 해결했다.



function popup()
{

window.dialogArguments.window.parentsPopWIndow = null;

if(window.dialogArgument!=null)//modal창이 아닐 경우
{
window.open("windowOpen.html");
}
else//modal창일 경우
{
window.dialogArguments.window.parentsPopWIndow = window;
window.dialogArgument.window.open("windowOpen.html");
}
}




참고문헌


반응형

'개발 > 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