2013-08-12 5 views
3

버튼을 클릭 한 다음이 창에서 열어 본 창에 콘텐츠를 추가하면 새 창이 열리고 사용중인 jquery 코드는 다음과 같습니다.자식 창에서 부모 창 콘텐츠에 액세스

$(".printBtn").on("click", function() { 
     var w = window.open("", "Purchase Report", "width=800, height=1100"); 
     var wi = $(window); 

     $(w.document.body).append(wi.find("#datatable_example")); 

     return false; 
    }); 

문제는 새 창이 열리지 만 상위 창에서 내용이 새로 열린 창에 추가되지 않는다는 것입니다. 그런 다음 wi.find("#datatable_example").html()을 추가하려고했지만 그 중 하나가 작동하지 않았습니다.

아무도 저를 보면서 내가 뭘 잘못하고 있는지 말해 줄 수 있습니까? UPDATE

은은 "중복 질문"에서 다음을 시도했지만 작동하지 않았다 :

$(".printBtn").on("click", function() { 
     var w = window.open("", "Purchase Report", "width=800, height=1100"); 

     $(w.document).ready(function() { 
      $(w.document.body).contents().append($(window).find("#datatable_example")); 
     }); 

     return false; 
    }); 
+0

Protip, 당신이 선택 아무것도 일치하는 경우 (아무 것도 발견되지 않으면 0이됩니다) 길이보고, 확인하고 싶은 경우 :'을 console.log를 (wi.find ("#의 datatable_example 여기에 작업 코드는 ") .length)' – xec

+0

중복 가능 [어떻게 하위 창의 dom 트리에 액세스 할 수 있습니까?] (http://stackoverflow.com/questions/1258563/how-can-i-access-the-dom-tree- 아이 창문) – oleq

+0

@oleq! 왜 그런데? 나는 그것을 달성하기 위해 완전히 다른 방법을 사용하고 있습니다. - 빈 URL 창이 열리면로드 할 시간이 없으므로 내용이없는 창이 나타납니다. - 하위 창과 관련이없는 paren't 창 콘텐츠에 액세스하려고 시도하고 있으며 여전히 하위 항목을 검색 할 수 없다는 문제가 있습니다. –

답변

1

)

그래서 가서 당신을 위해 일했다면 나는 그런 해결 방법은 생산 코드를 잘인지 궁금로 알려주십시오.

$(".printBtn").on("click", function() { 
    var w = window.open("", "Purchase Report", "width=800, height=1100"); 
    var wi = $(window.document); 

    $(w.document.body).append(wi.find("#datatable_example")); 

    return false; 
}); 
0

문제의 뿌리는 관찰 할 수없는 것 같은 원본 정책이다 외부 도메인에 대한 이벤트를로드합니다. , SO 모든 것이 잘 탐색하는 동안 당신이 개발자 콘솔에서이 작업을 시도 할 경우 : 다른 도메인의 페이지를 열려고 경우

var child = window.open('http://stackoverflow.com'); 

child.onload = function() { 
    alert('Popup loaded!'); // Fired! 
}; 

을 실패합니다 :

var child = window.open('http://stackexchange.com'); 

child.onload = function() { 
    // It's not gonna be fired unless you run it from stackexchange.com. 
    alert('Popup loaded!'); 
}; 

같은 일이 당신이 호출 할 때 발생 window.open() 또는 window.open('')은 도메인 범위를 벗어난 about:blank 페이지를로드하려고 시도하므로 브라우저가 연결된 이벤트를 실행하지 않습니다 (child.addEventListener('load')과 동일). 또한 프로토콜이 일치해야합니다. 그러나 다른 브라우저는 가끔 이상한 수행

var child = window.open(); 

setTimeout(function() { 
    var doc = child.document, 
     p = doc.createElement('p'); 

    p.innerHTML = 'Hello world!'; 
    doc.body.appendChild(p); 
}); 

그것은 최신 크롬에서 나를 위해 작동 :

해결 방법은 희망 늦게 충분히 그 시간에 DOM를 준비하려면 별도의 JS 스레드에서 콜백을 실행 setTimeout를 소개합니다 이러한 경우에는 문제가 발생하므로이 코드를 지연, 순차적 검사 또는 다른 경우 사용자의 경우 실패 할 경우이 코드를 조정해야 할 수도 있습니다. 문제는, 내가 var wi = $(window) 대신 var wi = $(window.document)을 사용 하였다

관련 문제