Mam adres URL typu: http://example.com#something
jak usunąć #something
, nie powodując odświeżenia strony?
Próbowałem następującego rozwiązania:
window.location.hash = '';
Nie usuwa to jednak symbolu skrótu #
z adresu URL.
javascript
window.location
fragment-identifier
Tom Lehman
źródło
źródło
Odpowiedzi:
Wstępne pytanie:
lub
oba zwrócą adres URL bez skrótu lub cokolwiek po nim.
W odniesieniu do Twojej edycji:
Każda zmiana
window.location
spowoduje wywołanie odświeżenia strony. Możesz zmienićwindow.location.hash
bez uruchamiania odświeżania (chociaż okno przeskoczy, jeśli Twój skrót pasuje do identyfikatora na stronie), ale nie możesz pozbyć się znaku skrótu. Wybierz coś, co jest gorsze ...NAJBARDZIEJ AKTUALNA ODPOWIEDŹ
Prawidłowa odpowiedź na temat tego, jak to zrobić bez poświęcenia (pełne przeładowanie lub pozostawienie tam znaku skrótu) znajduje się tutaj . Pozostawiając tę odpowiedź tutaj, ponieważ jest oryginalna w 2009 roku, a poprawna, która wykorzystuje nowe interfejsy API przeglądarki została podana 1,5 roku później.
źródło
Rozwiązanie tego problemu jest obecnie znacznie bardziej dostępne. HTML5 History API pozwala nam manipulować pasek lokalizacji, aby wyświetlić dowolny adres URL w bieżącej domenie.
Działające demo: http://jsfiddle.net/AndyE/ycmPt/show/
Działa to w Chrome 9, Firefox 4, Safari 5, Opera 11.50 i IE 10. W nieobsługiwanych przeglądarkach zawsze możesz napisać wdzięcznie poniżający skrypt, który korzysta z niego, jeśli jest dostępny:
Możesz więc pozbyć się symbolu skrótu, ale nie we wszystkich przeglądarkach - jeszcze.
Uwaga: jeśli chcesz zastąpić bieżącą stronę w historii przeglądarki, użyj
replaceState()
zamiastpushState()
.źródło
(Zbyt wiele odpowiedzi jest zbędnych i nieaktualnych). Najlepszym rozwiązaniem jest teraz:
źródło
history.pushState(null, null, ' ')
zamiast tego, jeśli chcesz zachować historię.null
dostate
ititle
parametrach ostatecznie robi.Prosty i elegancki:
źródło
.
zamiast/
. Użycie/
zmienia adres URL do ścieżki głównej.history.replaceState({}, document.title, location.href.substr(0, location.href.length-location.hash.length));
dla mojego przypadku użycia.history.replaceState(null, document.title, location.pathname + location.search);
Aby usunąć skrót, możesz spróbować użyć tej funkcji
źródło
Spowoduje to również usunięcie końcowego skrótu. np .: http://test.com/123#abc -> http://test.com/123
źródło
Co powiesz na następujące?
window.location.hash=' '
Pamiętaj, że ustawiam skrót w pojedynczej spacji, a nie w pustym ciągu.
Ustawienie skrótu na niepoprawną kotwicę również nie powoduje odświeżenia. Jak na przykład,
window.location.hash='invalidtag'
Ale powyższe rozwiązanie jest mylące. To wydaje się wskazywać, że na danym stanowisku znajduje się kotwica o podanym imieniu, chociaż nie ma takiego. Jednocześnie użycie pustego ciągu powoduje przejście strony na górę, co czasami może być nie do przyjęcia. Korzystanie ze spacji zapewnia również, że za każdym razem, gdy adres URL zostanie skopiowany, dodany do zakładek i ponownie odwiedzony, strona zwykle będzie na górze, a spacja zostanie zignorowana.
I, hej, to moja pierwsza odpowiedź na StackOverflow. Mam nadzieję, że ktoś uzna to za przydatne i zgodne ze standardami społeczności.
źródło
Możesz to zrobić jak poniżej:
history.replaceState({}, document.title, window.location.href.split('#')[0]);
źródło
źródło
umieść ten kod w sekcji nagłówka
źródło
źródło
Myślę, że byłoby bezpieczniej
źródło
Spróbuj wykonać następujące czynności:
źródło
Oto inne rozwiązanie, aby zmienić lokalizację za pomocą href i wyczyścić skrót bez przewijania.
Magiczne rozwiązanie wyjaśniono tutaj . Specyfikacje tutaj .
UWAGA: Proponowany interfejs API jest teraz częścią WhatWG HTML Living Standard
źródło
źródło
Możesz zastąpić hash wartością null
źródło