정보 보관 ver1.0

엑세스가 거부 되었습니다. (IE 자바스크립트오류)

James Wetzel 2010. 11. 15. 18:40

부모의 객체를 가져오다, 엑세스가 거부되었다는 오류가 뜬다.

iframe 으로 뜨는 자식페이지에서 부모의 객체를 가져와서 iframe 쪽 사이즈 자동 변경처리를 만들어 놨는데, 개발 서버에서는 나지 않는 자바스크립트 오류 (엑세스가 거부 되었습니다.) 가 유독 운영서버에서만 발생했다.

아무튼 몇번의 디버깅과 구글링을 통해, 그 해답을 빠르게 얻을 수 있었다.

JavaScript iframe Object : http://www.cadvance.org/?leftmenu=doc/include/total_menu.asp&mainpage=doc/java/object/iframe_object.asp

링크를 따라가 보면,

iframe의 security(보안 문제)

iframe의 src로는 상대 경로를 지정해야 됩니다. 예를 들어 http://www.som_uri.com/ 과 같은 절대 경로는 사용하면, IE는 '엑세스가 거부 되었습니다.' 라는 경고창이 뜨고, FF의 경우에는 아예 무시하고 아무런 작동도 하지 않게 됩니다. 그러므로 '../doc/iframe.html' 과 같은 자기의 서버나, 무료 홈 계정 폴더의 상대 경로를 사용해야 됩니다.

이런 내용이 있다. 
일단 이 내용을 참조하여, 추가적인 구글링을 실시.

[Java & Coffee 블로그] javascript opener 오류 "엑세스가 거부 되었습니다."  : http://eyecandyzero.tistory.com/178

[ajax 블로그] [javascript] pop 으로 띄운 child 가 parent 값을 읽지 못할 때  : http://ajax.tistory.com/20

결국 부모창의 도메인과 자식창의 도메인이 서로 달라 이런 문제가 발생할 수 있었던 거다.

document.domain 을 자식창에서 다시 동일하게 지정해서 문제를 해결했다.

현재 내 쪽에서 발생한 문제는 서브 도메인 (www.naver.co.kr 을 메인으로, test.naver.co.kr 을 서브도메인으로 사용하여 자식창에서 부모창 값을 가지고 온다.) 때문에 발생했으니, 간단하게 자식창에서 parent 값을 가져오기 전에 메인 도메인으로 지정해서 가져오도록 수정했다.

if (document.domain.toString().indexOf("naver.co.kr") != -1) {
document.domain="naver.co.kr"; 
}


[ 2010. 6. 24 추가합니다. ]
한쪽에서만 해결해 주면 되는 게 아니었습니다.
www.naver.com 과 test.naver.com 두 곳에 모두 document.domain = "naver.com" 으로 지정해 주어야 합니다.

자료 출처] http://rkjun.tistory.com/113
728x90
반응형