TL; DR
1- Aby zmodyfikować aktualny adres URL i dodać / wstawić go (nowy zmodyfikowany adres URL) jako nowy wpis adresu URL do listy historii, użyj pushState:
window.history.pushState({}, document.title, "/" + "my-new-url.html");
2- Aby zamienić aktualny adres URL bez dodawania go do wpisów historii, użyj replaceState:
window.history.replaceState({}, document.title, "/" + "my-new-url.html");
3- W zależności od logiki biznesowej , pushStateprzyda się w takich przypadkach, jak:
chcesz obsługiwać przycisk Wstecz w przeglądarce
chcesz utworzyć na nowy adres URL, add / insert / popchnąć nowy adres URL do historii zgłoszeń, i sprawiają, że aktualny adres URL
umożliwiając użytkownikom dodania zakładek do strony z tymi samymi parametrami (aby wyświetlić te same treści)
aby programowo uzyskać dostęp do danych za pośrednictwem stateObjnastępnie analizy z kotwicy
Jak zrozumiałem z twojego komentarza, chcesz wyczyścić swój adres URL bez ponownego przekierowywania.
Pamiętaj, że nie możesz zmienić całego adresu URL. Możesz po prostu zmienić to, co pojawia się po nazwie domeny. Oznacza to, że nie możesz zmienić, www.example.com/ale możesz zmienić to, co nastąpi później.com/
www.example.com/old-page-name => can become => www.example.com/myNewPaage20180322.php
tło
Możemy użyć:
1- Metoda pushState (), jeśli chcesz dodać nowy zmodyfikowany adres URL do wpisów historii.
2- Metoda replaceState (), jeśli chcesz zaktualizować / zamienić bieżący wpis historii.
.replaceState()działa dokładnie tak samo, .pushState()z wyjątkiem tego, że .replaceState() modyfikuje bieżący wpis historii zamiast tworzyć nowy. Zwróć uwagę, że nie zapobiega to tworzeniu nowego wpisu w globalnej historii przeglądarki.
.replaceState()jest szczególnie przydatne, gdy chcesz zaktualizować obiekt stanu lub adres URL bieżącego wpisu historii w odpowiedzi na jakąś akcję użytkownika.
Kod
Aby to zrobić, w tym przykładzie użyję metody pushState (), która działa podobnie do następującego formatu:
var myNewURL = "my-new-URL.php";//the new URL
window.history.pushState("object or string", "Title", "/" + myNewURL );
Zapraszam do wymiany pushStatezreplaceState zależności od wymagań.
Można zastąpić paramter "object or string"z {}i "Title"z document.titletak ostateczna statment będzie:
window.history.pushState({}, document.title, "/" + myNewURL );
Wyniki
Poprzednie dwa wiersze kodu utworzą adres URL, taki jak:
https://domain.tld/some/randome/url/which/will/be/deleted/
Zostać:
https://domain.tld/my-new-url.php
Akcja
Teraz spróbujmy innego podejścia. Powiedz, że musisz zachować nazwę pliku. Nazwa pliku pojawia się po ostatnim /i przed ciągiem zapytania ?.
http://www.someDomain.com/really/long/address/keepThisLastOne.php?name=john
Będzie:
http://www.someDomain.com/keepThisLastOne.php
Coś takiego sprawi, że będzie działać:
//fetch new URL
//refineURL() gives you the freedom to alter the URL string based on your needs.
var myNewURL = refineURL();
//here you pass the new URL extension you want to appear after the domains '/'. Note that the previous identifiers or "query string" will be replaced.
window.history.pushState("object or string", "Title", "/" + myNewURL );
//Helper function to extract the URL between the last '/' and before '?'
//If URL is www.example.com/one/two/file.php?user=55 this function will return 'file.php'
//pseudo code: edit to match your URL settings
function refineURL()
{
//get full URL
var currURL= window.location.href; //get current address
//Get the URL between what's after '/' and befor '?'
//1- get URL after'/'
var afterDomain= currURL.substring(currURL.lastIndexOf('/') + 1);
//2- get the part before '?'
var beforeQueryString= afterDomain.split("?")[0];
return beforeQueryString;
}
AKTUALIZACJA:
Dla fanów z jednym liniowcem wypróbuj to w konsoli / firebug, a adres URL tej strony ulegnie zmianie:
window.history.pushState("object or string", "Title", "/"+window.location.href.substring(window.location.href.lastIndexOf('/') + 1).split("?")[0]);
Adres URL tej strony zmieni się z:
http://stackoverflow.com/questions/22753052/remove-url-parameters-without-refreshing-page/22753103#22753103
Do
http://stackoverflow.com/22753103#22753103
Uwaga: jak Samuel Liew wskazał w komentarzach poniżej, ta funkcja została wprowadzona tylko dla HTML5.
Alternatywnym podejściem byłoby przekierowanie strony (ale utracisz ciąg zapytania `? ', Czy jest nadal potrzebny, czy dane zostały przetworzone?).
window.location.href = window.location.href.split("?")[0]; //"http://www.newurl.com";