2012-01-26 9 views
2

iframe 내에 중첩 된 iframe 내에 중첩 된 iframe을 제거해야합니다.이상한 무한 루프 - 예 :

내 코드의 구조는 다음과 같습니다. 모든 브라우저에서 정상적으로 작동하지만 무한 루프가 발생합니다. 그러나 CPU가 무한 루프에있는 동안 전혀 키워지지 않습니다.

var getNested_iframes = function (document_element) { 
     $.each(document_element.find("iframe"), function() { 
      getNested_iframes($($(this)[0].document)); 
     }); 
     alert("."); 
    } 
    getNested_iframes($(myWindow._element)); 
    alert("done"); 
+5

'$ (this) [0]'은 정확히'this'와 똑같습니다 ... – Pointy

답변

0

당신이 그것을하고있는 것처럼 당신이 그것을하고있는 이유를 확실히 모르겠어요,하지만 "$ ($ (이) [0] .document가)"비트가 나에게 TCH 비린내가 보인다 . 어쨌든, jquery 객체는 본질적으로 임의의 크기의리스트이므로 재귀보다는 반복을 사용하여 반복 작업을 수행 할 수 있습니다 (재귀에서 반복으로 전환 할 수 있습니다. 정리). 다음을 시도하십시오

$startlist = $(myWindow._element); 

while($startlist.length > 0) 
{ 
    $nextlist = $startlist.find("iframe"); 
    alert("(" + nextlist.length + ")"); 
    $startlist = $nextlist; 
} 

alert("done"); 

심지어 각 레벨에 얼마나 많은 레벨이 있는지, 얼마나 많은 레벨이 있는지 등을 추적 할 수도 있습니다.

+0

예! 효과가있었습니다. 오류가 발생한 곳의 디버거 스크린 샷을 찍었습니다. 내가 디버거를 잘못 읽고있을 수도 있지만 IE는 다른 객체 내부에서 문제의 객체를 가지고있는 것처럼 보입니다. http://i1120.photobucket.com/albums/l493/powerfulcrunch/whatthehell.png –

+1

IE에는 의도하지 않은 장소에 dom 객체 래퍼를 추가하는 습관이 있습니다. 나는 특히 그것을 테이블 주변에서 알아 봤지만, 확실히 그것이 작물을 재배하는 유일한 장소는 아닙니다. –

+0

아 잠깐만 기다려주세요! 그것은 효과가 있지만 한 단계 아래로 내려갑니다. 중첩 된 iframe이있는 상황에 있기 때문에 재귀가 필요합니다. –