Znalazłem liczne odpowiedzi na temat wyodrębnienia adresu URL bez parametrów.

Jak przepisać adres URL na pasku adresu bez powodowania ponownego załadowania z nowym adresem URL?

shortURL = top.location.href.substring(0, top.location.href.indexOf('?'));
top.location.href = shortURL // Causes redirect

Celem jest wyodrębnienie parametrów w JavaScript, ale nie wyświetla je w pasku adresu.

8
B Seven 14 grudzień 2011, 23:51

5 odpowiedzi

Najlepsza odpowiedź

W nowoczesnych przeglądarkach z obsługą obiektu historii można użyć history.replaceState() lub history.pushState(), aby zmienić bieżący adres URL bez zmiany bieżącej strony. Istnieją ograniczenia na temat tego, co można zmienić (na przykład nie można zmienić domeny / pochodzenia w ten sposób ze względów bezpieczeństwa).

Zobacz Oto dla podsumowania tych metod.

Historia przeglądarki jest nagrywaniem, gdzie byłeś w sesji przeglądania. .replaceState() Umożliwia wymianę bieżącego elementu na liście historii z innym. .pushState() Dodaje nowy element do historii przeglądarki i oba zmienić adres URL wyświetlany w pasku URL przeglądarki bez ponownego ładowania strony. Wybierasz tę metodę, w zależności od tego, jak chcesz zachowywać się przycisk "Back" przeglądarki.

Uwaga: Te API są obsługiwane w IE 10 i nowsze.

W starszych wersjach przeglądarki bez wsparcia dla API Historii, jedyną częścią adresu URL można zmienić bez ponownego ładowania strony jest znacznik Hash (część po symbolu adresu URL) na końcu adresu URL.

12
jfriend00 25 kwiecień 2014, 18:44

W HTML5 możliwe jest przepisanie adresu URL bez ponownego ładowania strony (nadal nie można zmienić nazwy domeny ze względów bezpieczeństwa), przy użyciu interfejsu API Historia Możesz napisać:

history.replaceState("object or string", "title", "/another-new-url");

W którym pierwsze dwa parametry są jakoś dowolnie arbitralne, a trzeci parametr jest nowy adres URL (nie w tym nazwy domeny). Jeśli chcesz włączyć przycisk Wróć do poprzedniego URL, użyj pushState zamiast replaceState powyżej. Przeczytaj więcej o tych funkcjach w tym funkcji Post na blogu .

W odniesieniu do wsparcia przeglądarki jest wspierany w najnowszych wersjach Firefoksa i Chrome, ale tylko w IE10 +, co nie jest jeszcze bardzo powszechne. Szczegółowe informacje znajdują się Matrix zgodności lub Szczegóły wdrażania przeglądarki.

6
Amir Ali Akbari 20 styczeń 2013, 12:07

Nie możesz zmienić wartości w pasku adresu bez przekierowania. To byłoby spełnienie marzeń phishingu!

Możesz jednak zmienić Identyfikator fragmentu: (w javascript, wartość window.location.hash )

<!DOCTYPE html>
<html>
<head>
<title>This is a test</title>
<script>
window.onload = function() {
    window.location.hash = "Loaded!";
    document.getElementById("click-me").onclick = function() {
        window.location.hash = "Click!";
        document.getElementById("click-me").onclick = function() {
            window.location.hash = "Clicked AGAIN!";
        };
    };
}
</script>
<body>
<div>
<input type="button" id="click-me" value="click me!" />
</div>
</body>
</html>

Ale zmiana ciągu zapytania przekieruje stronę.

2
Richard JP Le Guen 14 grudzień 2011, 20:02

Możesz użyć nowego pushstate, który jest częścią API HISTORY HTML 5, co pozwala na zmianę adresu URL bez ponownego przeładunku przeglądarki.

Sprawdź http://badassjs.com/post/ 840846392 / Lokalizacja-Hash-is-Dead-Long-Live-HTML5-Pushstate dla szybkiego przykładu i http://diveintohtml5.info/history.html dla więcej szczegółowych przykładów i ograniczeń:

1
varfoo 14 grudzień 2011, 20:15

Nie sądzę, że istnieje na to możliwość, mam na myśli, że prawdopodobnie mógłbyś przepisać adres URL po załadowanym i dodać zwroty false, więc uniemożliwiasz ponowne ładowanie, ale w przeciwnym razie musiałbyś wykonać post na adres URL, aby to osiągnąć Nie pokazano żadnego parametru.

0
mas-designs 14 grudzień 2011, 19:54