페이지를 새로 고치지 않고 URL을 http://example.com#something
제거하려면 어떻게해야 #something
합니까?
다음 해결책을 시도했습니다.
window.location.hash = '';
그러나 이것은 #
URL에서 해시 기호 를 제거하지 않습니다 .
페이지를 새로 고치지 않고 URL을 http://example.com#something
제거하려면 어떻게해야 #something
합니까?
다음 해결책을 시도했습니다.
window.location.hash = '';
그러나 이것은 #
URL에서 해시 기호 를 제거하지 않습니다 .
답변:
초기 질문 :
window.location.href.substr(0, window.location.href.indexOf('#'))
또는
window.location.href.split('#')[0]
둘 다 해시없이 URL을 반환합니다.
편집과 관련하여 :
로 변경 window.location
하면 페이지 새로 고침이 시작됩니다. window.location.hash
새로 고침을 트리거하지 않고 변경할 수 있지만 (해시가 페이지의 ID와 일치하면 창이 점프하지만) 해시 기호를 제거 할 수는 없습니다. 더 나쁜 것을 골라라 ...
가장 최신의 답변
희생하지 않고 (완전히 다시로드하거나 해시 기호를 남기지 않고) 수행하는 방법에 대한 정답은 여기에 있습니다 . 2009 년에 원래 답변이었던 것에 대해서는이 답변을 남겨두고 새로운 브라우저 API를 활용하는 올바른 답변은 1.5 년 후에 제공되었습니다.
이 문제를 해결하는 것은 오늘날 훨씬 더 많은 범위 내에 있습니다. HTML5 역사 API는 우리가 현재 도메인 내의 모든 URL을 표시 할 위치 표시 줄을 조작 할 수 있습니다.
function removeHash () {
history.pushState("", document.title, window.location.pathname
+ window.location.search);
}
실무 데모 : http://jsfiddle.net/AndyE/ycmPt/show/
이 기능은 Chrome 9, Firefox 4, Safari 5, Opera 11.50 및 IE 10에서 작동합니다. 지원되지 않는 브라우저의 경우, 사용 가능한 경우이를 사용하는 정상적으로 저하 된 스크립트를 항상 작성할 수 있습니다.
function removeHash () {
var scrollV, scrollH, loc = window.location;
if ("pushState" in history)
history.pushState("", document.title, loc.pathname + loc.search);
else {
// Prevent scrolling by storing the page's current scroll offset
scrollV = document.body.scrollTop;
scrollH = document.body.scrollLeft;
loc.hash = "";
// Restore the scroll offset, should be flicker free
document.body.scrollTop = scrollV;
document.body.scrollLeft = scrollH;
}
}
따라서 일부 브라우저에서만 해시 기호를 제거 할 수 있습니다.
참고 : 브라우저 기록에서 현재 페이지를 바꾸려면 replaceState()
대신을 사용하십시오 pushState()
.
(너무 많은 답변이 중복되고 구식입니다.) 이제 가장 좋은 해결책은 다음과 같습니다.
history.replaceState(null, null, ' ');
history.pushState(null, null, ' ')
기록을 보존 하려면 대신 사용하십시오 .
null
이 궁극적으로 수행 하는 작업을 설명하는 것이 유용 할 수 있습니다 . state
title
간단하고 우아한 :
history.replaceState({}, document.title, "."); // replace / with . to keep url
.
대신 사용하십시오 /
. 를 사용 /
하면 URL을 루트 경로로 변경합니다.
history.replaceState({}, document.title, location.href.substr(0, location.href.length-location.hash.length));
. 사용 사례로 수정했습니다 .
history.replaceState(null, document.title, location.pathname + location.search);
후행 해시도 제거됩니다. 예 : http://test.com/123#abc- > http://test.com/123
if(window.history.pushState) {
window.history.pushState('', '/', window.location.pathname)
} else {
window.location.hash = '';
}
다음은 어떻습니까?
window.location.hash=' '
해시를 빈 문자열이 아닌 단일 공백으로 설정하고 있습니다.
해시를 잘못된 앵커로 설정해도 새로 고침이 발생하지 않습니다. 같은
window.location.hash='invalidtag'
그러나 위의 해결책이 오도 된 것으로 나타났습니다. 이것은 주어진 이름에 앵커가 없지만 주어진 위치에 앵커가 있음을 나타냅니다. 동시에 빈 문자열을 사용하면 페이지가 맨 위로 이동하여 때때로 허용되지 않을 수 있습니다. 공백을 사용하면 URL을 복사하여 책갈피에 추가하고 다시 방문 할 때마다 페이지가 보통 맨 위에 오며 공백이 무시됩니다.
그리고, 이것이 StackOverflow에 대한 첫 번째 대답입니다. 누군가가 유용하다고 생각하고 커뮤니티 표준과 일치하기를 바랍니다.
const url = new URL(window.location);
url.hash = '';
history.replaceState(null, document.title, url);
<script type="text/javascript">
var uri = window.location.toString();
if (uri.indexOf("?") > 0) {
var clean_uri = uri.substring(0, uri.indexOf("?"));
window.history.replaceState({}, document.title, clean_uri);
}
</script>
이 코드를 헤드 섹션에 놓으십시오
다음을 시도하십시오 :
window.history.back(1);
href를 사용하여 위치를 변경하고 스크롤하지 않고 해시를 지우는 또 다른 솔루션이 있습니다.
매직 솔루션은 여기 에 설명되어 있습니다 . 여기 사양 .
const hash = window.location.hash;
history.scrollRestoration = 'manual';
window.location.href = hash;
history.pushState('', document.title, window.location.pathname);
참고 : 제안 된 API는 이제 WhatWG HTML Living Standard의 일부입니다.
해시를 null로 바꿀 수 있습니다
var urlWithoutHash = document.location.href.replace(location.hash , "" );