2012-06-13 4 views
2

자식 창에서 부모 창에서 JS 함수를 실행 하시겠습니까?

예 내가 다른 웹 사이트에이

이의 내가 URL site2.com

의 새 창을 엽니 다 site1.com에서 원하는 site1.comsite2.com

을 가정 해 봅시다 자식 창에서 부모 창에서 자바 스크립트 함수를 실행하려면

new_window = window.open("site2.com/index.php", "window2"); 

그런 다음 js functio를 실행하고 싶습니다. 이 new_window에 n test().

// Where site2.com/index.php 
<html> 
    ...... 
</html> 
<script> 
    function test(){ 
    // some code here 
    } 
</script> 

새로운 창 (아이)를 열고 부모 창에서 일부 JS 기능을 실행하려면 요약.

답변

2

cross document messaging을 사용하면 다음과 같이 동일한 출처 정책을 우회 할 수 있습니다.

부모 윈도우 (site1.com)

var site2 = window.open("http://site2.com"); 
site2.postMessage("test", "http://site2.com"); 

자식 창 (site2.com)

function test() { 
    // some code here 
} 

window.addEventListener("message", function (event) { 
    if (event.origin === "http://site1.com") { 
     var funct = window[event.data]; 
     if (typeof funct === "function") 
      funct(); 
    } 
}, false); 

이것은 단순한 일례이다. 콜백, 반환 값 등을 허용하도록 좀 더 정교하게 만들 수는 있지만 블로그 게시물을 완전히 설명해야합니다.

Mozilla Developer Network에서 window.postMessage에 대한 자세한 내용을 볼 수 있습니다.

그러나 다음 예제는 Internet Explorer에서 (분명히) 작동하지 않습니다.

+0

좋은 예입니다. @Aadit M Shah –

0

보안상의 이유로 동일한 도메인에 있지 않으면 자식 창에서 함수를 실행해야합니다.

+0

사실 수 있습니다. 당신이해야 할 일은'postMessage'를 사용하여 당신 만의 dispatcher 함수를 만드는 것입니다. –

+0

@AaditMShah는 당신이 무슨 뜻인지 이해할 수있게 해줄 수 있습니까? –

관련 문제