티스토리 뷰

팝업창으로 띄운 페이지가 다른 서버에 존재할 경우 띄워진 페이지에서
opener객체를 이용해서 호출한 페이지의 다른 엘리먼트를 접근하는 것은
보안상의 이유로 브라우져에서 접근을 거부하게 되어 있다.

예를 들면 www.spbear.pe.kr내에 있는 open.html 파일이 다음과 같고

<script language="JavaScript">
<!--
function popup()
{
var win = window.open('http://home.spbear.pe.kr/popup.html','popup',
'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,
resizable=no,width=765,height=517,top=0,left=0');
win.focus();
}
//-->
</script>

....

<script>
popup();
</script>

home.spbear.pe.kr내에 있는 popup.html 파일이 다음과 같다면

<script language=javascript>
<!--
opener.top.location.reload();
self.close();
//-->
</script>

구동 시켜보면 opener.top.location.reload() 에서 다음과 같은 에러가 나게 된다.

이는 서로간에 도메인이 달라서 이런 일이 발생하게 되므로 서로간의 도메인을 맞춰 주는 다음과 같은 코드가 필요하다.

document.domain = "spbear.pe.kr";

이렇게 수정된 코드는 다음과 같다.

<script language="JavaScript">
<!--
function popup()
{
document.domain = "spbear.pe.kr";
var win = window.open('http://home.spbear.pe.kr/popup.html','popup',
'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,
resizable=no,width=765,height=517,top=0,left=0');
win.focus();
}
//-->
</script>

<script language=javascript>
<!--
document.domain = "spbear.pe.kr";
opener.top.location.reload();
self.close();
//-->
</script>