IFRAME의로드가 완료되면 Javascript 콜백?


Answers

jQuery를 사용하고 놀랍게도 이것은 무거운 페이지를 테스트하고로드했을 때로드되는 것처럼 보이고 iframe로드를 확인할 때까지 몇 초 동안 경고를받지 못했습니다.

$('#the_iframe').load(function(){
    alert('loaded!');
});

따라서 jQuery를 사용하지 않고 소스 코드를 살펴보고이 함수가 iframe DOM 요소와 다르게 동작하는지 확인하려면 나중에 관심을 가져 게시하고 여기에 게시 할 것입니다. 또한 나는 최신 크롬만을 테스트했다.

Question

IFRAME이로드를 완료하면 콜백을 실행해야합니다. IFRAME의 내용을 제어 할 수 없기 때문에 거기에서 콜백을 시작할 수 없습니다.

이 IFRAME은 프로그래밍 방식으로 만들어졌으며 콜백에서 변수로 데이터를 전달하고 iframe을 파괴해야합니다.

어떤 아이디어?

편집하다:

여기에 내가 지금 가지고있는 것이있다.

function xssRequest(url, callback)
{
    var iFrameObj = document.createElement('IFRAME');
    iFrameObj.src = url;            
    document.body.appendChild(iFrameObj);   

    $(iFrameObj).load(function() 
    {
        document.body.removeChild(iFrameObj);
        callback(iFrameObj.innerHTML);
    });
}

이 콜백은 iFrame이로드되기 전에 콜백에 반환 된 데이터가 없습니다.




onload attrbute를 사용하면 문제가 해결됩니다.

다음은 그 예입니다.

function a() {
alert("Your iframe has been loaded");
}
<iframe src="https://.com" onload="a()"></iframe>

이게 니가 원하는거야?

자세한 내용을 보려면 여기클릭하십시오 .




로드 이벤트가 옳다고 생각합니다. 부적절한 것은 iframe 콘텐츠 돔에서 콘텐츠를 수집하는 방법입니다.

필요한 것은 iframe 객체의 html이 아닌 iframe에로드 된 페이지의 html입니다.

해야 할 일은 iFrameObj.contentDocument 를 사용하여 컨텐트 문서에 액세스하는 iFrameObj.contentDocument 입니다. 현재 페이지의 동일한 도메인에있는 경우 iframe 내부에로드 된 페이지의 DOM을 반환합니다.

iframe을 제거하기 전에 콘텐츠를 검색합니다.

저는 파이어 폭스와 오페라에서 테스트했습니다.

그렇다면 $(childDom).html() 또는 $(childDom).find('some selector') ... 하여 데이터를 검색 할 수 있다고 생각합니다 $(childDom).find('some selector') ...




나는 잘 작동하는 프로젝트에서 비슷한 코드를 가지고있다. 내 코드를 함수에 적용하면 다음과 같은 해결책을 얻을 수 있습니다.

function xssRequest(url, callback)
{
    var iFrameObj = document.createElement('IFRAME');
    iFrameObj.id = 'myUniqueID';
    document.body.appendChild(iFrameObj);       
    iFrameObj.src = url;                        

    $(iFrameObj).load(function() 
    {
        callback(window['myUniqueID'].document.body.innerHTML);
        document.body.removeChild(iFrameObj);
    });
}

아마도 innerHTML이 비어 있습니다 (하나 또는 둘 모두 원인). body 요소에 대해 사용해야합니다. 2. 페이지 DOM에서 iframe을 제거했습니다.




Word docs 및 pdfs와 같은 문서가 iframe으로 스트리밍되고 꽤 잘 작동하는 솔루션을 발견 한 경우이 작업을 수행해야했습니다. 핵심은 iframe에서 onreadystatechanged 이벤트를 처리하는 것입니다.

프레임의 이름이 "myIframe"이라고합니다. 먼저 어딘가에 코드 시작 (iframe 후 iframe을 인라인으로 처리)에서 이와 같이 이벤트 처리기를 등록하십시오.

document.getElementById('myIframe').onreadystatechange = MyIframeReadyStateChanged;

iframe에 onreadystatechage 속성을 사용할 수 없었기 때문에 그 이유를 기억할 수는 없지만 IE 7 및 Safari 3에서 작동해야하므로 요인이 될 수 있습니다.

다음은 완전한 상태를 얻는 방법의 예입니다.

function MyIframeReadyStateChanged()
{
    if(document.getElementById('myIframe').readyState == 'complete')
    {
        // Do your complete stuff here.
    }
}