2008-11-14 11 views
0

프레임 셋을 사용하는 웹 페이지가 있습니다.뒤로 단추 문제없이 HTML 프레임을 특정 순서로로드 하시겠습니까?

스크립팅 및 개체 종속성으로 인해 특정 순서로 프레임을로드해야합니다.

나는 템플릿으로이 예제를 사용했다 : 는 The JavaScript Source: Navigation: Frames Load Order

이는, 내가 마지막으로로드해야 페이지 대신에 빈 페이지를로드 첫 페이지가로드 된 후 올바른 페이지로 대체합니다.

그러나 브라우저의 뒤로 버튼을 사용해야합니다. 위의 링크에서 샘플을 실행하면 두 프레임이 모두로드 된 후 뒤로 버튼을 클릭하면 상단 프레임이 임시 빈 페이지로 되돌아갑니다. 그런 다음 뒤로 버튼을 다시 클릭하여 프레임 세트 앞에있는 페이지로 이동해야합니다.

[뒤로] 단추 동작을 사용하지 않고 특정 순서로 프레임을 강제로드하는 방법이 있습니까? [뒤로] 단추가 빈 페이지를 건너 뛰게하는 방법이 있습니까?

Internet Explorer 6 및 7에서 작동해야하며, Firefox 3에서도 작동해야합니다.

답변

0

빌드 자바 스크립트를 사용하여 프레임 자체 :

<html> 
<head> 
<script> 
function makeFrame(frameName) { 
    var newFrame = document.createElement('frame'); 
    newFrame.id=frameName; 
    if(frameName=="B") { 
     newFrame.onload=function() {makeFrame("C")}; 
     newFrame.src = 'http://www.google.com'; 
    } 
    else { 
     newFrame.src = 'http://www.yahoo.com'; 
    } 
    document.getElementById('A').appendChild(newFrame); 

} 
</script> 
</head> 
<frameset name='A' id='A' rows="80, *" onload="makeFrame('B')"></frameset> 
</html> 
+0

좋은 제안이지만 샘플에는 몇 가지 결함이 있습니다. 두 프레임 모두 동일한 ID를 얻지 만 더 중요한 것은 IE7에서 작동하도록 할 수 없습니다. (?) –

+0

방금 ​​제안의 많은 순열을 시도했습니다. . IE7/IE8에서 잘 작동합니다 (IE6을 사용해 보지 않았습니다). 그러나 Firefox 3에서 이상한 캐싱 문제로 인해 문제가 발생합니다. 기사를 정리하고 싶지만,이 시점에서, 나는 붙어있다. –

+0

캐싱을 방지하려면 임의의 매개 변수를 SRC에 추가하십시오. now = new Date() newFrame.src = 'http://www.yahoo.com?now='+now; –

0

왜/크기를 조정 한 후, 원하는 순서대로 세 가지 iframe을 사용하여 적절한 위치로 이동하지?

<iframe id="a1" src="page-to-load-first.htm"></iframe> 
<iframe id="a2" src="page-to-load-second.htm"></iframe> 
<iframe id="a3" src="page-to-load-third.htm"></iframe> 
<script> 
function pos(elem,x,y,w,h) { 
    if (!elem.style) elem=document.getElementById(elem); 
    elem.style.position='absolute'; 
    elem.style.top = y+'px'; 
    elem.style.left= x+'px'; 
    elem.style.width=w+'px'; 
    elem.style.height=h+'px'; 
} 
window.onload = function() { 
    window.onresize=function() { 
     var w = window.innerWidth || document.documentElement.clientWidth; 
     var h = window.innerHeight || document.documentElement.clientHeight; 
     var w3 = w/3; 
     var h2 = h/2; 
     pos('a1',0,0,w3,h); /* left 1/3rd */ 
     pos('a2',w3,0,w3+w3,h2); 
     pos('a3',w3,h2,w3+w3,h2); 
    }; 
    window.onresize(); 
}; 
</script> 
+0

이것은 레거시 시스템입니다. 프레임 셋이 필요합니다. iframe을 사용할 수 있다고하더라도 샘플은 아무런 차이가 없습니다. 페이지에 표시되는 순서로도 순서대로로드된다는 보장은 없습니다. 첫 번째 iframe을 2 초에로드하고 두 번째 프레임을 1 초에로드한다고 가정합니다. –

+0

IFrame은 프레임과 달리 일반 돔 요소이므로 document.createElement()를 사용하여 해당 요소를 만들 수 있습니다. window.onresize를 사용하면 프레임 셋 환경을 에뮬레이션 할 수 있습니다. "왜이 시스템은 기존 시스템입니까?" 초기 콘텐츠를 변경할 수 없다는 것을 의미합니까? – geocar

+0

레거시 = 나머지 시스템은 페이지가 프레임에 상주 할 것으로 예상합니다.모델 변경은 다른 곳에서 코드를 변경하는 것을 의미합니다. IFrame을 사용하면 쉽게 흐름을 제어 할 수 있습니다. 그것을 시험해보아야하지만, IFrame이 나를 위해 실행 가능한 옵션이 아닐 수도 있으므로 프레임 문제에 대한 수정을 기대합니다. –

1

당신은

이 레거시 시스템입니다 ...이 게시물이 꽤 많이 언급. 프레임 셋이 필요합니다.

레거시 시스템에서 작업하는 경우 브라우저의 뒤로 버튼과 관련하여 프레임 세트가 작동하는 방식을 수락 할 시점이라고 생각합니다. 진정으로 레거시 시스템 인 경우이 동작을 수정하지 않아도됩니다. 실제로 레거시 시스템이 아니며이 문제를 해결해야하는 경우 프레임 셋을 사용하지 않아야합니다. 프레임 세트는 HTML 표준에서 사용되지 않으므로 사용하지 않아야합니다.

+0

그저 단순하다면. – umassthrower