2011-09-21 4 views
1

javascript를 사용하여 다른 프레임을 약간 변경하려고하지만 올바르게로드 될 때까지 기다려야합니다.프레임 셋의 다른 프레임이로드를 마칠 때까지 기다려주십시오.

프레임 -A의 내용을 약간 변경 한 프레임 -B가 있습니다. 이 로딩 완료되면 I 프레임-A에 플래그를 설정 한 :

프레임 A :

// Flag to indicate that the page is loaded. Used by frame-B 
var documentLoaded = false; 
$(document).ready(function() { documentLoaded = true; }); 

프레임 B :

function onLeftFramesLoad(loops) { 
    // Check if the menu frame is finished loading, if not try again in Xms. 
    // To Avoid eternal loop if for some reason the documentLoaded flag is not set after Y seconds: break loop. 
    if (!parent.frames[0].window || !parent.frames[0].window.documentLoaded && 
     loops < 40) 
    { 
     setTimeout(onLeftFramesLoad(loops + 1), 250); 
     return; 
    } 
    // do changes to frame-A 
} 

// Using jQuery here to wait for THIS frame to finish loading. 
$(document).ready(function() { 
     onLeftFramesLoad(0); 
}); 

내 문제는 그 때 프레임-B로드입니다 프레임 -A 전에 프레임 -A가로드되기를 기다리지 않습니다. 나는. setTimeout 부분이 작동하지 않는 것 같습니다.

프레임 -B는 약 30ms 만 걸리므로 시간 초과되지 않습니다.

useless setTimeout call (missing quotes around argument?) 

은 FF와 크롬에서 테스트 :

방화범이 나에게 자바 스크립트 콘솔에서이 메시지를 제공합니다.

답변

2
setTimeout(onLeftFramesLoad(loops + 1), 250); 

onLeftFramesLoad(loops + 1)의 반환 값을 실행합니다. 이것은 기본적으로 쓰는 것과 같습니다.

setTimeout(undefined, 250); // onLeftFramesLoad always returns undefined 

undefined()는 분명히 작동하지 않습니다. 이를 수행하는 올바른 방법은 다음과 같습니다.

setTimeout(function() { 
    onLeftFramesLoad(loops + 1); 
}, 250); 

이것은 함수이므로 실행 가능합니다.

의 setTimeout 기능에 대한 추가 정보를 원하시면

확인 https://developer.mozilla.org/en/window.setTimeout

+0

* Headpalm! 그 중 하나를 보았을 것입니다 ... 고마워, 많이! – Polymorphix

0

setTimeout에 함수를 전달해야합니다. 현재 함수를 즉시 호출하고 반환 값을 전달하고 있습니다 (없는 경우).

그래서 당신은 함수로 포장하고, 그 기능을 전달해야하는 것 : 그것은에서는 setTimeout 전에 onLeftFramesLoad을 실행하므로이 무엇

setTimeout(function() { onLeftFramesLoad(loops + 1); }, 250); 
관련 문제