* 팝업창 오픈하고 부모창 이동후 팝업창 재사용하기

1. 부모창에서 팝업창을 엽니다.
2. 부모창의 주소를 바꿉니다. (same domain)
3. 부모창의 주소가 바뀌고 아까 열은 팝업창을 자동으로 엽니다.

전에 게시물에 질문을 올린글입니다.

var wndObj = window.open(...);

이렇게 하면 윈도우 개체를 구해서 wndObj에 넣고 팝업 윈도우를 제어할 수 있습니다.
그런데 부모창의 페이지가 같은 도메인내에서 바뀌었다고 가정했을때도
부모창의 이전 페이지에서 열은 wndObj를 참조할 수 없습니다.

웹브라우저는 페이지가 바뀌면 처음부터 다시 시작하니까요.
window 개체에는 이미 열린 팝업창을 담고 있는 어떠한 레퍼런스도 없습니다.

이 부분에 대해 자료를 찾아 봤는데 구글신과 양키님이 힌트를 주신것이 있어서
소개합니다. (상단 링크1 참조)

골자는 이렇습니다.

if ($_SESSION['inChildSite'] ==true ) echo "<script>window.open(...)</script>"

1. Set cookie A from parent site when launching child popup.
2. Set cookie B from child site on every page load.
3. Clear cookie B from child site on every page unload.
4. When logging out of parent site:
4-1. If cookie A is set, clear it and close local connection to child site.
4-2. If cookie B is set, clear it and open child logout page in popup.

요즘 브라우저들이 윈도우 오픈시 팝업창을 못열게 막아놓습니다.
그렇지만 같은 도메인에서 오픈한 팝업창을 다시 open 할 수는 있습니다.
(경고창 없이)

상단 링크2에서 "팝업창" 링크를 클릭해서 팝업창을 열고
하단의 feedback_2 link를 눌러서 부모창의 주소를 바꿉니다.
그러면 부모창에서 2번 페이지에서 열리는데 이때 아까 팝업창이 경고 메세지 없이
재호출되는것을 확인할 수 있습니다. (IE6, IE8 정상작동)

※ 확인을 위해 팝업창에는 랜덤 숫자와 날짜와 시간이 표시됩니다.

───────────────────────────────────────
문제는 파이어폭스나 구글크롬의 경우, <body onload> 시에
자동으로 오픈한 팝업창의 경우 .focus() 명령을 거부하는겁니다.
setTimeout()을 써도 안됩니다. (정상적인 방법으로는 불가능)

이거 해결하려면 외국의 벌거벗은 여자들 나오는 스팸 페이지 찾아가서
거기 자바스크립트 분석해서 만들어야 합니다.

아무튼 어디서 봤는데 파이어폭스던 구글크롬이던 경고창 없이 무조건 팝업창을
열게하는 코드가 사용되고 있더군요. (야매로는 가능)
───────────────────────────────────────

[핵심] 자바스크립트가 제일 짜증난다.

[결론] 웹브라우저 제작사는 window.getWindowByName() 을 만들어 달라!!                                       
2011/06/09 04:48 2011/06/09 04:48

Trackback Address :: https://youngsam.net/trackback/1480