2012-04-16 2 views
1

여러 프레임에 걸쳐 있어야하는 팝업 창이 있으므로이 작업을 수행하기 위해 window.createPopup을 사용하고 있습니다.팝업 창 안의 빈 DOM

function ShowMyPopup() { 
    notificationPopup = window.createPopup(); 
    $(notificationPopup.document.body).load("/notification.html"); 
    notificationPopup.show($(sourceFrame.document.body).width() - 510, $(sourceFrame.document.body).height() - (510 - $(sourceFrame.document.body).height()), 500, 500, sourceFrame.document.body); 
} 

이 꽤 잘 작동하는 것 같다 : (IE6, 7, 8)은 다음

나는 팝업을 만드는 데 사용하고 기능입니다. 내가해야 할 팝업 창이 보인다. 문제는 내가하는 일과 관계없이 결과 팝업 창에서 DOM 요소에 액세스 할 수없는 것입니다. 나는 다양한 jQuery 메서드뿐만 아니라 똑 바른 getElementById를 시도했으며 모두 NULL을 리턴한다. 다음은 notification.html의 내용입니다 :

<html> 
<head> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      alert($(document).html()); 
      alert($("#divNotification").html()); 
      alert(document.getElementById("divNotification")); 
     }); 
    </script> 
</head> 
<body> 
    <div id="divNotification" onclick="$(this).toggle();"> 
     <h3>Some Notification!</h3> 
     Testing 1234... 
    </div> 
</body> 
</html> 

는 내가 jQuery를 작동하는지 알고 있지만, 세 경고는 단순히 "NULL"을 보여 세 가지 경고를 참조 때문에. 결과 div를 클릭하면 onClick이 발생하지만 "Object Expected"오류가 발생합니다.

여기에 무슨 일이 일어나고 있습니까?

+0

데모에서 jQuery는 포함되어 있지 않습니다. –

+0

'$ (document) .html()'을 사용하여 문서의 html을 가져 오려고합니다.'("html") .html()'을 사용해야합니다. 이로 인해 첫 번째 경고가 null을 반환합니다. 다른 두 가지는 DOM에 액세스하려고 할 때 준비가되지 않아 발생할 수 있습니다. 시간 제한을 추가하여 지연하십시오. –

+0

Rob-jQuery는 부모 페이지에 포함되어 있으며, 팝업을 통해 작동 할 수 있습니다. (아니면 그렇지 않습니까?) 어떤 경우에도 notification.html의 ref jQuery에 스크립트 태그를 추가하면 아무런 차이가 없습니다. – RMD

답변

0

확인 등 myPopup

  • 팝업 주소 메인 창으로 팝업을 해결합니다. 나는 이것을 알아 냈다. 그것은 꽤 직관적입니다.

    기본적으로 모든 관련 자바 스크립트 라이브러리가 소스 프레임에로드됩니다. 그런 다음이 메서드에 액세스하기 위해 소스 프레임을 해당 이름으로 명시 적으로 참조해야합니다.

    팝업 창 내부의 자바 스크립트 이라도 팝업 창의 DOM에 액세스하려는 경우 해당 항목을 완전히 정규화 (또는 jQuery가 정확한 루트 객체 제공)해야 작동합니다.

    function MakePopupRed() { 
        if (notificationPopup) { 
         $("#divNotification", notificationPopup.document).css("background-color", "red"); 
        } 
    } 
    

    그래서, 기본적으로, 자바 스크립트입니다 것으로 나타납니다 내 소스 프레임의 참조 된 자바 스크립트 라이브러리에 지금

    <div id="divNotification" onclick="top.SourceFrame.MakePopupRed();"> 
        <h3>Some Notification!</h3> 
        Testing 1234... 
    </div> 
    

    : 예를 들어

    , 여기에 나의 새로운 notification.html입니다 window.createPopup에서 생성 된 팝업 내에서 실행하면 팝업 창 자체가 아니라 상위 창 컨텍스트에서 실행됩니다!

  • +0

    네 말이 맞아. 직관적이지. 그것을 해결하는 것에 대한 축하. 실제로 예를 들어 팝업을 추상화해야합니다. 'var $ nPopup = $ ("notificationPopup.document");를 (필요에 따라) 각 프레임에 추가하고 팝업 컨텍스트로'$ nPopup'을 사용하여 javascript에서 팝업의 이벤트 핸들러를 첨부합니다. js에 핸들러를 붙이는 것은 일반적으로 HTML 접근 방식 인 PLUS보다 우수하며,이 경우 top.SourceFrame을 사용하지 않아도됩니다. ... '정규 프레임에서 js 회원을 처리하기위한 팝업의 표기법. –

    0

    this reference에 따르면 window.createPopup()으로 "스크립트는 메서드에서 반환 한 팝업 개체에 콘텐츠 (외부 URL이 아님)를 할당해야합니다."

    콘텐츠에 외부 URL을 할당하려는 경우 비 독점 (브라우저 간) 방법 window.open()을 사용해야합니다.

    window.open()을 사용하면 주 창과 팝업 창 간의 통신을 계속 수행 할 수 있습니다. 팝업 가정

    다음, var myPopup = window.open(...);을 열 수 :

    • 메인 창은 opener
    +0

    외부 URL을 지정하지 않습니다. 외부 URL에서 jQuery를 통해 콘텐츠를로드하고 해당 내용을 팝업 창에 지정합니다. – RMD

    +0

    네, 당연히 알겠습니다. 도! –