2009-09-03 7 views
14

스크립트가 열린 창을로드하는 것을 쉽게 감지 할 수 있습니까? 기본적으로, 나는 onLoad() 후크에 해당하는 것을 원하지만, 직접 설정할 수는 없습니다. 하위 문서가 주어진 것으로 가정하고 실제로 내 자신의 코드를 넣을 수는 없습니다.자식 창로드가 완료 될 때까지 기다리는 중

parent.html :

<html> 
    <head> 
    <title>Parent</title> 
    </head> 
    <script type="text/javascript"> 
    var w; 
    function loadChild() { 
     w = window.open(); 
     w.location.href="child.html"; 
     // block until child has finished loading... how? 
     w.doSomething(); 
    } 
    </script> 
</html> 
<body> 
    I am a parent window. <a href="javascript:loadChild()">Click me</a>. 
</body> 

child.html :

<html> 
    <head> 
    <title>Child</title> 
    </head> 
    <script type="text/javascript"> 
    function doSomething() { 
     alert("Hi there"); 
    } 
    </script> 
</html> 
<body> 
    I am a child window 
</body> 

이후 설정 같이 location.href입니다 비 차단, w.doSomething() ISN '예를 들어

, 나는 다음과 같은 두 개의 파일이 있다고 가정 해 t가 아직 정의되지 않았으므로 doSomething() 전화가 터집니다. 아이가로드를 완료 한 것을 어떻게 감지 할 수 있습니까?

답변

15

새롭게 문을 연 윈도우의 위치가 동일 출처 경우이 작동 :하지만,

var w = window.open('child.html') 
w.addEventListener('load', w.doSomething, true); 
+0

"동일 출처 "를 명확히 할 수 있습니까? 내 로컬 상자의'file : ///' URL에서 작동하지 않는 것 같지만 보안 문제 일 수 있습니까? –

+0

예, 아마도 브라우저에서, same-origin은 기본적으로 대상이 동일한 _host_ 및 sa에 있어야 함을 의미합니다. 나 _protocol_. 'http : //'와 혼합하고 있습니까? –

+0

IE에서 'addEventLister'가 제대로 지원되지 않는다는 것을 잊어 버렸습니다. gabtub와 같은 jQuery를 사용하면 (또는 이벤트 처리를위한 브라우저 비 호환성 문제를 해결하는 다른 JS 프레임 워크) 아마도 좋은 생각입니다 ... –

4

방법에 대한

parent.html :

<html> 
<head> 
<title>Parent</title> 
</head> 
<script type="text/javascript"> 
    var w; 
    function loadChild() { 
    w = window.open(); 
    w.location.href="child.html"; 
    // like this (with jquery) 
    $(w).ready(function() 
    { 
     w.doSomething(); 
    }); 
    } 
</script> 
</html> 
<body> 
    I am a parent window. <a href="javascript:loadChild()">Click me</a>. 
</body> 
+2

이 jQuery를 요구하는 ... 바람직하지 않을 수 있습니다 ... – peirix

+0

아무것도하지 않는 것 같습니다. (이전에'$ '연산자를 보지 못했습니다 (자바로 대부분의 시간을 보냈습니다) 어떻게해야할까요? Chrome JavaScript 디버거에서'잡히지 않은 예외 ReferenceError : $ is not defined'를 받았습니다. –

+0

죄송합니다. cross-comment. 그래, jQuery, 내가 왜 그것을 보지 못했는지 설명 할 것이다. 그냥 DOM을 그대로 사용하는 방법이 있어야 할 것 같다. –

관련 문제