익스플로러 5.5(?) 이후 부터는 스크립트로 server1.abc.com 과 live.abc.com 간의 상호 도메인이 다른 프레임이나 윈도우의 document에 관련된 작업을 시도하면 보안에러가 발생한다.
Cross-Frame Scripting 에 대한 MS의 말..
http://msdn2.microsoft.com/en-us/library/ms533028.aspx
넷스케이프 같은 경우에는 스크립트(Signed scripts)에서 브라우져자체에 포함(?)된 클래스(netscape.security.PrivilegeManager)를 호출하여 이를 해결할 수 있다고 한다.
Signed Scripts 에 대한 Mozilla의 말..
http://www.mozilla.org/projects/security/components/signed-scripts.html
그럼에도 불구하고 다른 도메인에 대한 opener 나 parent 접근이 필요할 경우에는 JavaScript 를 통해 document.domain 을 설정해 주면된다.
<script language="javascript">
document.domain = "공통도메인명";
</script>
상호 연결 시켜야 하는 웹 페이지에 자신들의 공통된 도메인을 지정해 주면 컨트롤이 가능해진다.
만약, server1.abc.com의 open.htm이 window.open 으로 live.abc.com을 호출하고 live.abe.com 의 child.htm이 opener 로 server1.abc.com 을 접근해야 한다면
다음 스크립트를 두 페이지에 정의해 주면 되고, 스크립트는 페이지 어디에 위치해 있든지 특별한 상관은 없다.
<script language="javascript">
document.domain = "abc.com";
</script>
※ 주의, 도메인 명을 잘못 입력한 경우에는 "잘못된 인수입니다." 라는 JavaScript 오류가 발생한다.
=========================================================================================
cross frame scripting 을 해결하는 다른 방법으로는 HTA가 있다.
html페이지가 아닌 hta(html application)페이지를 만들어야 한다.
http://msdn.microsoft.com/workshop/author/hta/hta_node_entry.asp
※ 다음은 HTA에서 javascript로 iframe의 document를 참조한 예
확장자를 hta로 저장하시고 브라우저로 실행.
<html>
<head>
<title>hta cross scripting</title>
<script>
function window.onload() {
alert(myframe.document);
}
</script>
</head>
<body scroll="no">
<iframe id=myframe src="http://kin.naver.com/"></iframe>
</body>
</html>
다음에, 예를 하나 들면..
kin.naver.com을 iframe에 넣고 검색어에 "스크립트"라는 단어를 넣은 후 검색버튼을 누르게 한 HTA소스이다.
<head>
<title>hta cross scripting</title>
<script>
function window.onload() {
myframe.document.search.query.value="스크립트";
myframe.check_query();
}
</script>
</head>
<body scroll="no">
<iframe id=myframe src="http://kin.naver.com/" width=100% height=100%></iframe>
</body>
</html>
'개발도 하냐?' 카테고리의 다른 글
java 데몬형태 프로그램 작성시 서버소켓을 사용하는 shutdown 패턴 (0) | 2009.12.02 |
---|---|
웹접근성을 보장하는 웹개발을 위한 고려사항 (0) | 2009.12.02 |
HTML vs XHTML? (0) | 2009.12.01 |
웹표준 가입폼 (0) | 2009.11.30 |
javascript AJAX 페이지로딩 (0) | 2009.11.28 |