6

ajax를 사용하여 프레임의 페이지 위치를 업데이트하고 있습니다. 그러나 해시 위치를 설정할 때 (Chrome 및 일부 버전의 IE (5.5), 특히 IE7에서 가끔씩) 페이지가 다시로드됩니다.프레임에서 위치를 설정합니다.

다음 html은 문제를 보여줍니다.

메인 프레임 .... frame.html는 sethash.html 페이지

<html><head> 
<frameset rows="*"> 
<frame src=sethash.html frameborder=0 scrolling=auto name=somebody> 
</frameset> 
</head></html> 

이다.

<html><head> 
<script language=JavaScript> 
var Count = 0; 
function sethash() 
{ 
    top.document.location.hash = "hash" + Count; 
    Count++; 
} 
</script> 
</head> 
<body onload="alert('loaded')"> 
<h1>Hello</h1> 
<input type='button' onClick='sethash()' value='Set Hash'> 
</body> 
</html>` 

대부분의 브라우저에서 frame.html을로드하면 페이지가로드 될 때로드 된 경고가 한 번 표시됩니다. 그런 다음 설정된 해시 버튼을 누르면 URL이 변경되지만로드 된 경고는 다시 표시되지 않습니다. 크롬과 IE

의 일부 버전에 와

마이크로 소프트 보고서 가능성이 같은 문제는 Internet Explorer 5.5 link text

나는 마이크로 소프트가 화재 이벤트를 캡처하지 않는 것입니다 솔루션을 제안 사용하지만, 단지 스크롤 할 수 없습니다 onLoad 이벤트의 일부로 top.location.hash를 사용하여 볼 수 있습니다.

답변

6

웹킷 (및 확장명은 Chrome)은 location.hash로 이상하게 작동합니다. 거기에 대한 몇 가지 오픈 버그, 가장 관련이 아마도 하나 : https://bugs.webkit.org/show_bug.cgi?id=24578 location.hash 변경되면 페이지를 새로 고치는 데 문제가 문서. 지금 가장 좋은 옵션 인 것처럼 보입니다. 손가락을 교차하여 신속하게 해결되기를 바랍니다. 그래도 난 IE7의 버그를 재현 할 수없는, 당신은 IE5.5 그래서 난 정말 거기에 당신을 도울 수있는 지원 내가 본 시대의 첫 번째 사람이야

)

0

가 되세요 해시에 대한 숨겨진 링크를 만들려고 시도하고 심지어 클릭을 발사 했나요?

0

어떨까요? location.href = '#yourhash'; 어쩌면 버그를 우회 할 수도 있습니다.

2

이 문제도 발생했습니다. 내 상황으로 인해 사용자 브라우저에서 다음 페이지로 이동하거나 새로 고친 값으로 해시를 설정하는 이벤트의 창 바인딩 해제를 만들 수있었습니다. 이것은 나를 위해 일했지만, 그것이 당신을 위해 일할 것인지 확신하지 못합니다. jQuery로

, 내가 그랬어 :이 전에 올바른 해시 값을 볼 좋을 수도

 
if($.browser.webkit){ 
    $(window).unload(function() { 
     top.window.location.hash = hash_value; 
    }); 
}else{ 
    top.window.location.hash = hash_value; 
} 

기술적으로 당신은 웹킷 검사를 수행 할 필요가 없습니다,하지만 난 파이어 폭스를 사용하는 사람들에 대한 생각들이 프레임 셋을 새로 고칩니다.

크롬 및 사파리에 대한

-Jacob

2

, 당신은

function loadHash(varHash) 
{ 
    if(varHash != undefined) { 
    var strBrowser = navigator.userAgent.toLowerCase(); 

    if (strBrowser.indexOf('chrome') > 0 || strBrowser.indexOf('safari') > 0) { 
     this.location.href = "#" + varHash; 
    } 
    else { 
     this.window.location.hash = "#" + varHash; 
    } 
    } 
} 
1

아래 코드를 참조하면 window.location.hash보다는 작업 해시를 얻을 수 window.location.href를 사용할 필요가 나는 임시 해결책을 가지고 있으며 iframe이 내장 된 전체 페이지 테이블이 필요하다. 나는 100 % 너비와 100 % 너비를 차지하고 두 개의 행이있는 테이블로 프레임 셋을 대체했다. 그런 다음 각 표 셀에서 각 셀의 높이와 너비를 100 % 사용하는 iframe을 배치했습니다. 이것은 기본적으로 프레임 세트가없는 프레임 세트를 모방합니다. 무엇보다도 해시 변경에 대한 재로드가 필요 없습니다!

여기 내 예전의 코드입니다 :

<html> 
<head> 
<title>Title</title> 
</head> 
<frameset rows="48,*" frameborder="yes" border="1"> 
    <frame name="header" noresize="noresize" scrolling="no" src="http://header" target="_top"> 
    <frame name="main" src="http://body" target="_top"> 
    <noframes> 
    <body> 
    <p>This page uses frames, but your browser doesn&#39;t support them.</p> 
    </body> 
    </noframes> 
</frameset> 
</html> 

... 그리고 여기 내 새로운 코드입니다 :이 도움이

<html> 
<head> 
<title>Title</title> 
<style type="text/css"> 
body { margin: 0px; padding: 0px; border: none; height: 100%; } 
table { height:100%; width:100% } 
td { padding: 0px; margin: 0px; border: none; } 
td.header { height: 48px; background-color: black; } 
td.body { background-color: silver; } 
iframe.header { border: none; width: 100%; height: 100%; } 
iframe.body { border: none; width: 100%; height: 100%; } 
</style> 
</head> 
<body> 
<table cellpadding="0" cellspacing="0"> 
    <tr><td class="header"><iframe class="header" src="http://header" target="_top" scrolling="no"></iframe></td></tr> 
    <tr><td class="body"><iframe class="body" src="http://body" scrolling="no"></iframe></td></tr> 
</table> 
</body> 
</html> 

희망.

3

Chrome의 페이지를 새로 고침하지 않고 HTML5 history.pushState()을 사용하여 해시를 변경할 수도 있습니다. 이 같은 뭔가 :

// frameset hash change function 
function changeHash(win, hash) { 
    if(history.pushState) { 
     win.history.replaceState(null, win.document.title, '#'+hash); 
    } else { 
     win.location.hash = hash; 
    } 
} 

첫 번째 인수에서 당신은 프레임 상단 창을 통과해야합니다.

+0

이것은 작동합니다. 작은 메모 : [Chrome이 favicon에 깜박임을 표시하고 정지/새로 고침 버튼] (http://code.google.com/p/chromium/issues/detail?id=50298).보기 흉하게 보입니다. – Blaise

관련 문제