Tworzę galerię zdjęć i chciałbym mieć możliwość zmiany ciągu zapytania i tytułu podczas przeglądania zdjęć.
Zachowanie, którego szukam, jest często widoczne w niektórych implementacjach ciągłej / nieskończonej strony, gdzie podczas przewijania ciągu zapytania w dół ciąg zapytania zwiększa numer strony ( http://x.com?page=4 ) itd. Tak powinno być w teorii proste, ale chciałbym czegoś, co jest bezpieczne we wszystkich głównych przeglądarkach.
znalazłem ten świetny post i próbowałem podążać za przykładem window.history.pushstate
, ale to nie wydaje się działać dla mnie. I nie jestem pewien, czy jest idealny, ponieważ tak naprawdę nie obchodzi mnie modyfikowanie historii przeglądarki.
Chcę tylko móc zaoferować możliwość dodania zakładek do aktualnie oglądanego zdjęcia bez ponownego ładowania strony za każdym razem, gdy zdjęcie jest zmieniane.
Oto przykład nieskończonej strony, która modyfikuje ciąg zapytania: http://tumbledry.org/
UPDATE znalazło tę metodę:
window.location.href = window.location.href + '#abc';
wydaje się, że działa dla mnie, ale korzystam z nowego chrome .. prawdopodobnie spowodowałoby to problemy ze starszymi przeglądarkami?
źródło
:)
Odpowiedzi:
Jeśli szukasz modyfikacji skrótu, Twoje rozwiązanie działa poprawnie. Jeśli jednak chcesz zmienić zapytanie, możesz użyć pushState, jak powiedziałeś. Oto przykład, który może pomóc we właściwym wdrożeniu. Przetestowałem i działało dobrze:
Nie przeładowuje strony, a jedynie umożliwia zmianę zapytania URL. Nie możesz zmienić protokołu ani wartości hosta. I oczywiście, że wymaga nowoczesnych przeglądarek, które potrafią przetwarzać interfejs API historii HTML5.
Po więcej informacji:
http://diveintohtml5.info/history.html
https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history
źródło
window.location.protocol + '//' + window.location.host
do zaledwie:window.location.origin
.history.pushState()
. Niestate
jest też wymagany żaden argument. Oba oznaczają, że możesz zrobić coś prostego, na przykładhistory.pushState(null, '', '/foo?bar=true')
jeśli nowy adres URL znajduje się na tym samym hoście / porcie.history.replaceState()
tych samych argumentów.if (window.history.pushState) { const newURL = new URL(window.location.href); newURL.search = '?myNewUrlQuery=1'; window.history.pushState({ path: newURL.href }, '', newURL.href); }
Opierając się na odpowiedzi Fabio, stworzyłem dwie funkcje, które prawdopodobnie będą przydatne dla każdego, kto natknie się na to pytanie. Dzięki tym dwóm funkcjom możesz wywołać
insertParam()
z kluczem i wartością jako argumentem. Doda parametr adresu URL lub, jeśli parametr zapytania już istnieje z tym samym kluczem, zmieni ten parametr na nową wartość:źródło
new URLSearchParams()
przypadku natywnych metod ustawiania i usuwania ? w obu przypadkach musimy przenieść to do historiihistory.pushState()
new URLSearchParams()
nie jest obsługiwany przez żadną wersję IEZ wielkim sukcesem korzystałem z następującej biblioteki JavaScript:
https://github.com/balupton/jquery-history
Obsługuje interfejs API historii HTML5, a także metodę awaryjną (przy użyciu #) dla starszych przeglądarek.
Ta biblioteka jest w zasadzie wypełnieniem wokół `history.pushState '.
źródło
Chcę poprawić odpowiedź Fabio i stworzyć funkcję, która dodaje klucz niestandardowy do ciągu adresu URL bez ponownego ładowania strony.
źródło
W takim razie API historii jest dokładnie tym, czego szukasz. Jeśli chcesz obsługiwać również starsze przeglądarki, poszukaj biblioteki, która powraca do manipulowania tagiem skrótu adresu URL, jeśli przeglądarka nie zapewnia interfejsu API historii.
źródło