2009-06-23 2 views
1

location.hash는 Safari 4에서 완전히 깨진 것 같습니다. 처음에는 설정할 수 있지만 사용자가 해당 이벤트를 트리거했는지 여부는 알 수없는 한 설정할 수 없습니다 액션 또는 타이머.location.hash Safari 4의 기상 상태 홀 수 있음

파이어 폭스에서
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> 
    <head> 
     <!-- Include jQuery --> 
    </head> 
    <body> 
     <div id="test">Click the link below to make this text bold.</div> 
     <p><a href="#test">Bold it!</a></p> 
     <p id="hashValue"></p> 
     <script> 
$(document).ready(function() { 
    location.hash = '#normal';   // this works in all browsers 
    $('a').click(function() { 
     $('#test').css({'font-weight': 'bold'}); 
     location.hash = '#bold';  // this fails in Safari 4 
     return false; // prevents link href from affecting hash 
    }); 
    setInterval(function() { 
     if (! location.hash.match('bold$')) { 
      $('#test').css({'font-weight': 'normal'}); 
     } 
     $('#hashValue').html(location.hash); 
    }, 100); 
}); 
     </script> 
    </body> 
</html> 

, 행동은 당신이 기대하는 것입니다 : 여기

(나는 간결 여기 jQuery를 사용하지만, 나는이 문제가 특정 jQuery를 것을 상상할 수 없다) 예를 들어이되면 페이지를로드하면 해시는 #normal로 설정됩니다. 링크를 클릭하면 텍스트가 굵게 표시되고 해시는 #bold으로 설정됩니다. 해시가 변경되었으므로 간격 함수는 아무 효과가 없습니다. 검색 주소창의 해시를 다른 것으로 변경하면 (즉, bold으로 끝나지 않음) 텍스트의 굵은 글꼴이 지워집니다. 이렇게하면 뒤로 버튼이 직관적으로 작동합니다. 해시가 #bold 인 곳으로 돌아가서 텍스트가 굵게 표시됩니다. 다른 곳으로 클릭하면 텍스트가 굵은 체로 표시됩니다.

Safari 4에서 동작은 다음과 같습니다. 페이지를로드하면 해시가 #normal로 설정됩니다. 주소 표시 줄에 관한 한 영원히 계속됩니다. 링크를 클릭하면 텍스트가 굵게 표시되며 주소 표시 줄의 해시가 변경되지 않은 경우에도 그대로 유지됩니다. 따라서 location.hash는 내부적으로 변경됩니다 (hashValue 문단이 반영됨). 주소 표시 줄과의 불일치로 인해 다음과 같은 결과가 발생합니다. 뒤로 버튼을 클릭하면 텍스트의 굵은 글씨가 표시됩니다. 그 후에 앞으로 버튼을 클릭하면 다시 굵게 표시되지 않습니다! 이로 인해 jQuery history plugin과 같은 JavaScript 기록 라이브러리가 완전히 중단됩니다.

수정 사항? 해결 방법은 무엇입니까? 필자는 Mac의 Safari 4.0.1에서 이것을 테스트했습니다.

+0

나를 위해 일하십시오 (Safari 4.0.1 Mac). 작동하지 않는 버전에 대한 링크를 게시 하시겠습니까? – Miles

답변

1

그것은이 전혀 사파리의 버그가 아니라고 밝혀, 오히려 Glims에, 플러그인 내가 사용하던 : http://www.machangout.com/

문제를 해결 플러그인을 제거. Glims가 자바 스크립트가 주소 표시 줄과 상호 작용하는 것을 왜 망칠지 모르기 때문에 나는 이것을 가능성으로 생각하지 않았습니다.

최신 빌드를 다시 설치하면이 문제가 발생하지 않는 것으로 보입니다.

0

이렇게 할 수 있습니까?

window.location.replace(new_location); 
관련 문제