2009-07-15 8 views
2

새 창을 팝업하는 페이지에 링크가 있는데 두 번째 창이로드되는 데 시간이 오래 걸리는 경우가 있습니다. 하위 창로드가 완료 될 때까지 부모 창에서 링크를 비활성화하려고합니다. 부모 창에 경고하기 위해 자식 창을 onload() 할 수 있음을 알고 있지만 자식을 망치고 싶지는 않습니다. 그래서 자식 창을 폴링하여 그 데이터가 있는지 여부를 확인하는 자바 스크립트가 있습니다. 작동하지 않습니다. 해당 페이지에 특정 요소가있을 수 있는지 확신 할 수 없기 때문에 newwindow.document.getelementbyid를 사용할 수 없습니다. 어딘가에있는 것이 있는지보고 싶습니다.하위 브라우저 창로드가 완료되었는지 어떻게 확인할 수 있습니까?

+0

하위 창에로드되는 항목은 무엇입니까? 자신의 웹 도메인의 컨텐츠 또는 외부 도메인의 컨텐츠입니까? – James

답변

2

body 태그를 가져 와서 아이가 있는지 검사 할 수 있습니다. 그럴 경우 페이지가로드되거나 닫힙니다. IMO를 충분히 닫으십시오.

자녀의 URL이 동일한 도메인이 아닌 경우 아무 것도 할 수 없습니다. 그것은 XSS 취약점 일 것입니다.

+0

그게 내가 찾고 있었던 일이다. 고마워. – stu

3

자식 창의로드 이벤트에 리스너를 추가하기 만하면됩니다. 여기 정말 기본적인 예제를

<html> 
<head> 
<script type="text/javascript"> 

onload = function() 
{ 
    document.getElementById('test').onclick = function(event) 
    { 
    event.preventDefault(); 
    event.returnValue = false; 
    var link = event.target || event.src; 
    var childWin = window.open(link.href, 'child', 'width=400,height=300'); 
    childWin.onload = function() 
    { 
     alert('child window loaded!'); 
    } 
    } 
} 

</script> 
</head> 
<body> 

<a href="test2.html" id="test">test</a> 

</body> 
</html> 

주의 : 난 당신이 아이를로드하는 URL은 부모와 동일한 도메인에 속해있을 경우에만 작동하는지 당신에게 말할 것이다. 브라우저 보안 모델은 그렇게하지 못하게합니다.

+0

아마 그런 식으로 onload를 설정해서는 안됩니다. 당신은 그곳에 있던 무엇이든지 무시하고 있습니다. 브라우저에 따라 attachEvent 또는 addEventListener를 사용하십시오. – geowa4

+0

동의합니다 -이 간단한 예제의 완전한 추상화 프로세스를 수행하고 싶지 않거나 실제로 프로덕션 시스템에서 수행 할 작업을 jQuery와 같은 방식으로 수행하고 싶지 않습니다. –

+0

"부모에게 경고하기 위해 자식 창을 onload() 할 수 있음을 알지만, 나는 아이를 혼란스럽게하고 싶지 않습니다."- 당신의 솔루션이 그가 원하는 것인지는 알 수 없습니다. 그러나, 나는 그것을하는 더 나은 방법을 확실히 동의합니다. – geowa4

관련 문제