2010-01-22 9 views
12

windows.open (..)을 사용하여 팝업을 여는 웹 어플리케이션을 개발 중입니다. "window.open"에 의해 반환 된 핸들을 사용하여 열린 창에서 함수를 호출해야하지만 "addWindow.getMaskElements는 함수가 아닙니다"라는 오류 메시지가 항상 나타납니다. 함수에 선언 된 함수에 액세스 할 수없는 경우처럼 자식 창. 이는 IE와 FF 모두에서의 동작입니다. 내 코드는 다음과 같습니다javascript, 오프너에서 자식 윈도우 함수 호출이 작동하지 않습니다.

function AddEmail(target,category) 
{ 
    if(addWindow == null) 
    { 
     currentCategory = category; 
     var left = getDialogPos(400,220)[0]; 
     var top = getDialogPos(400,220)[1]; 
     addWindow = window.open("adicionar_email.htm",null,"height=220px, width=400px, status=no, resizable=no"); 
     addWindow.moveTo(left,top); 
     addWindow.getMaskElements(); 
    } 
} 

내가 봤 다른 신뢰할 수있는 소스에서 읽을 분명히이가 작동하도록되어 한, 그러나 그렇지 않습니다. 한 가지 더, 하위 창의 함수는 adicionar_email.htm 파일에 포함 된 별도의 .js 파일에 선언됩니다. 이 점이 다른 점이 있습니까? .. 누군가가 비슷한 문제에 부딪혔거나 내가 뭘 잘못하고 있는지 알지 못하는 경우이 메시지에 회신 해주십시오. 미리 감사드립니다.

Kenia

+0

'moveTo '는 전혀 작동합니까? 다른 함수의 경우 경쟁 조건이있을 수 있습니다. '.getMaskElements'가 존재할 때까지 기다릴 타이머를 설정하면, 완료 될까요? – Anonymous

답변

11

창 만들기는 차단 작업이 아닙니다. 스크립트는 해당 윈도우가 열려 있고 HTML & 자바 스크립트를로드하고 파싱하는 동안 계속 실행됩니다.

이 같은 원래의 페이지에 링크를 추가한다면 :

<a href="#" onclick="addWindow.getMaskElements();">Test</a> 

당신은 그것을 작동 볼 것.

function AddEmail() 
{ 

     if(addWindow == null) { 
     addWindow = window.open("test2.html",null,"height=220px, width=400px, status=no, resizable=no"); 
     } 

     if(!addWindow.myRemoteFunction) { 
      setTimeout(AddEmail,1000); 
     } else { addWindow.myRemoteFunction(); } 
} 

이것은 유지 : (. 난 그냥 확실하게 그것을 시도) ** 다른 편집 **

누군가가 대상 문서의 온로드를 호출하여 해결 방법을 게시

, 여기에 또 다른 접근 방식 addWindow.myRemoteFunction을 호출 할 때까지 1 초마다 addWindow.myRemoteFunction을 호출하려고합니다.

1

창을 연 직후 함수를 호출하고 있습니다. 팝업 페이지가 아직로드되지 않았으므로 해당 지점에서 함수가 정의되지 않을 수 있습니다.

5

문제는 window.open이 매우 빨리 반환된다는 것입니다. 요청 된 문서와 그 문서가 나중에 참조 할 수있는 다른 항목은 아직 창에로드되지 않은 것입니다.

따라서이 메서드를 너무 일찍 시도하면 실패합니다. 열린 창로드 이벤트에 함수를 연결하고 해당 함수에서 호출하도록하십시오. 아래의 하나

2

문제는 다음과 같습니다

자바 스크립트를 부모 윈도우에서 실행중인 경우, 자식 창은로드되지 않습니다. 따라서 상위 창에서 호출하는 함수는 무한 루프에 있으며 창을 크래시로 연결합니다.

창 만들기는 차단 작업이 아닙니다. 스크립트는 을 계속 실행하여 해당 창을 열고 HTML & javascript를로드하고 파싱하는 동안 실행합니다.

이 같은 원래의 페이지에 링크를 추가한다면 :

<a href="#" onclick="addWindow.getMaskElements();">Test</a> 

당신은 그것을 작동 볼 것.

function AddEmail() 
{ 

     if(addWindow == null) { 
     addWindow = window.open("test2.html",null,"height=220px, width=400px, status=no, resizable=no"); 
     } 

     if(!addWindow.myRemoteFunction) { 
      setTimeout(AddEmail,1000); 
     } else { addWindow.myRemoteFunction(); } 
} 

이 : (. 난 그냥 확실하게 그것을 시도) ** 다른 편집 **

누군가가 대상 문서에 온로드를 호출하여 해결 방법을 게시

, 여기에 또 다른 접근 방식 addWindow.myRemoteFunction를 호출 할 때마다 1 초마다 이 성공적으로 호출되도록 관리합니다.

관련 문제