Можете ли вы использовать хеш-навигацию, не влияя на историю?
Я боюсь, что это возможно невозможно, но есть способ изменить хеш-значение URL , не оставляя записи в истории браузера и без перезагрузки? Или эквивалент?
Что касается особенностей, я разрабатывал базовую хэш-навигацию по строкам:
//hash nav -- works with js-tabs
var getHash = window.location.hash;
var hashPref = "tab-";
function useHash(newHash) {
//set js-tab according to hash
newHash = newHash.replace('#'+hashPref, '');
$("#tabs li a[href='"+ newHash +"']").click();
}
function setHash(newHash) {
//set hash according to js-tab
window.location.hash = hashPref + newHash;
//THIS IS WHERE I would like to REPLACE the location.hash
//without a history entry
}
// ... a lot of irrelavent tabs js and then....
//make tabs work
$("#tabs.js-tabs a").live("click", function() {
var showMe = $(this).attr("href");
$(showMe).show();
setHash(showMe);
return false;
});
//hash nav on ready .. if hash exists, execute
if ( getHash ){
useHash(getHash);
}
Использование jQuery, очевидно. Идея состоит в том, что в этом конкретном случае: 1) заставить пользователя вернуться к каждой перестановке вкладок, может эффективно "разбить кнопку" назад ", нагромождая ненужные ссылки и 2) не сохраняя вкладку, в которой они сейчас находятся, если они попадают в обновление раздражение.
Ответы
Ответ 1
location.replace("#hash_value_here");
работал отлично для меня, пока не обнаружил, что он не работает на IOS Chrome. В этом случае используйте:
history.replaceState(undefined, undefined, "#hash_value")
history.replaceState() работает точно так же, как history.pushState(), за исключением того, что replaceState() изменяет текущую запись истории вместо создания нового один.
Не забудьте сохранить #
, или будет изменена последняя часть URL.
Ответ 2
location.replace("#hash_value_here");
Выше, похоже, делает то, что вам нужно.
Ответ 3
Изменить: Прошло уже пару лет, и браузеры эволюционировали.
@Luxiyalu answer - это путь
- Старый ответ -
Я тоже думаю, что это невозможно (в это время). Но почему вам нужно изменить значение хэша, если вы не собираетесь его использовать?
Я считаю основной причиной, по которой мы используем хеш-значение, поскольку программисты должны позволить пользователю добавлять закладки на наши страницы или сохранять состояние в истории браузера. Если вы не хотите этого делать, просто сохраните состояние в переменной и оттуда оттуда.
Я думаю, что причина использования хэша заключается в том, чтобы работать со значением, которое не под контролем. Если вам это не нужно, значит, это означает, что у вас есть все под вашим контролем, поэтому просто сохраняйте состояние в переменной и работайте с ним. (Мне нравится повторять себя)
Надеюсь, это поможет вам. Может быть, есть более легкое решение вашей проблемы.
UPDATE:
Как насчет этого:
- Установите первый хэш и убедитесь, что он сохраняется в истории браузера.
- Когда будет выбрана новая вкладка, сделайте
window.history.back(1)
, что приведет к возврату истории из вашего первого хеша инициализации.
- Теперь вы устанавливаете новый хеш, поэтому табуляция будет делать только одну запись в истории.
Вам, вероятно, придется использовать некоторые флаги, чтобы узнать, может ли текущая запись быть удалена, вернувшись или просто пропустите первый шаг.
И чтобы убедиться, что ваш метод загрузки для "хэша" не выполняется, когда вы нажимаете history.back
.
Ответ 4
Вы всегда можете создать прослушиватель событий, чтобы поймать события клика по гиперссылке, а в функции обратного вызова поместить e.preventDefault(), что должно помешать браузеру вставить его в историю.
Ответ 5
history.replaceState(undefined, undefined, "#profileInfo")
Где #profileInfo - ваш идентификатор.