2010-07-05 4 views
2

document.createElement("iframe");을 사용하여 Iframe을 만들고 네임 스페이스와 같은 iframe의 창 개체에 변수를 설정할 수 있습니까?Iframe에서 변수 설정

내가 이런 일을 시도 :

var Namespace = {}; 
var iframe = document.createElement("iframe"); 
iframe.src = "page.html"; 
document.body.appendChild(iframe); 
var iwin = iframe.contentWindow || iframe.contentDocument.defaultView; 
iwin.Namespace = Namespace; 

그러나 page.html에 내가 Namespace를 로그온을 시도하고 정의되지 않은 오류가 발생합니다.

답변

4

같은 출처 정책으로 인해 차단 될 수 있습니다. 두 페이지 모두에서 file : // uri 체계를 사용하는 경우 일부 브라우저에서도이 문제가 발생할 수 있습니다.

iframe과 외부 창이 동일한 도메인을 사용하는 경우 코드가 서버에 있으면이 문제가 없어집니다. 확인하기 위해 아파치를 사용하여 로컬 호스트를에서 제공하는 시도하거나이 게시물에 따라 사용할 동일 출처 정책 구글 크롬 테스트 : iframe이 다른에있을 필요가있는 경우, 다른 한편으로

Disable same origin policy in Chrome

도메인 또는 파일 : // uri scheme을 사용해야하는 경우 몇 가지 대안을 사용해야합니다.

다른 도메인에서 iframe으로 데이터를 전달하는 한 가지 방법은 iframe 요소의 src 속성에있는 조각 식별자를 사용하는 것입니다.이 속성은 iframe 창의 '위치'객체의 'hash'속성에 표시됩니다.

외부 페이지 :

<!doctype html> 
<html><head></head><body> 
<script> 
    var Namespace = {foo:1, bar:2}; 
    var iframe = document.createElement("iframe"); 
    iframe.src = "frame.html#" + JSON.stringify(Namespace); 
    document.body.appendChild(iframe); 
</script> 
</body></html> 

내부 페이지 "frame.html"예를 들어

<!doctype html> 
<html><head></head><body> 
<a href="#" onclick="alert(location.hash.substring(1))">click me</a> 
</body></html> 
+0

나의 영웅; 고마워요. file : //에 적용된 동일한 원점을 알지 못함 – Louis

0

document.appendChild (iframe);

DOM에 생성 한 노드를 추가해야한다고 확신합니다.

+0

아차는 편집을했다. 그래도 고쳐주지 않습니다. – Louis