Я создаю фотогалерею и хочу иметь возможность изменять строку запроса и заголовок при просмотре фотографий.
Поведение, которое я ищу, часто наблюдается в некоторых реализациях непрерывной / бесконечной страницы, где при прокрутке вниз строка запроса продолжает увеличивать номер страницы ( http://x.com?page=4 ) и т. Д. Это должно быть теоретически просто, но я бы хотел что-то безопасное для основных браузеров.
Я нашел этот отличный пост и пытался последовать его примеру window.history.pushstate
, но, похоже, мне это не помогло. И я не уверен, что это идеально, потому что меня не особо волнует изменение истории браузера.
Я просто хочу иметь возможность добавлять в закладки просматриваемую в данный момент фотографию, не перезагружая страницу каждый раз при изменении фотографии.
Вот пример бесконечной страницы, изменяющей строку запроса: http://tumbledry.org/
ОБНОВЛЕНИЕ обнаружило этот метод:
window.location.href = window.location.href + '#abc';
похоже, это работает для меня, но я использую новый Chrome .. это, вероятно, вызовет некоторые проблемы со старыми браузерами?
источник
:)
Ответы:
Если вы ищете модификацию хэша, ваше решение работает нормально. Однако, если вы хотите изменить запрос, вы можете использовать pushState, как вы сказали. Вот пример, который может помочь вам правильно его реализовать. Я тестировал, и все работало нормально:
Он не перезагружает страницу, а только позволяет изменить URL-запрос. Вы не сможете изменить протокол или значения хоста. И, конечно же, для этого требуются современные браузеры, которые могут обрабатывать HTML5 History API.
Чтобы получить больше информации:
http://diveintohtml5.info/history.html
https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history
источник
window.location.protocol + '//' + window.location.host
просто:window.location.origin
.history.pushState()
. Никаких реальныхstate
аргументов тоже не требуется. Оба эти фактора означают, что вы можете сделать что-то простое, например,history.pushState(null, '', '/foo?bar=true')
если ваш новый URL-адрес находится на том же хосте / порту.history.replaceState()
те же аргументы.if (window.history.pushState) { const newURL = new URL(window.location.href); newURL.search = '?myNewUrlQuery=1'; window.history.pushState({ path: newURL.href }, '', newURL.href); }
Основываясь на ответе Фабио, я создал две функции, которые, вероятно, будут полезны любому, кто наткнется на этот вопрос. С помощью этих двух функций вы можете вызывать
insertParam()
с ключом и значением в качестве аргумента. Он либо добавит параметр URL, либо, если параметр запроса с таким же ключом уже существует, изменит этот параметр на новое значение:источник
new URLSearchParams()
с его собственными методами, такими как установка и удаление ? в любом случае мы должны поместить это в историю сhistory.pushState()
new URLSearchParams()
не поддерживается никакими версиями IEЯ с большим успехом использовал следующую библиотеку JavaScript:
https://github.com/balupton/jquery-history
Он поддерживает API истории HTML5, а также резервный метод (с использованием #) для старых браузеров.
По сути, эта библиотека представляет собой полифил вокруг `history.pushState '.
источник
Я хочу улучшить ответ Фабио и создать функцию, которая добавляет настраиваемый ключ в строку URL без перезагрузки страницы.
источник
Тогда API истории - это именно то, что вам нужно. Если вы хотите поддерживать и устаревшие браузеры, поищите библиотеку, которая использует манипуляции с хэш-тегом URL, если браузер не предоставляет API истории.
источник