Можете ли вы использовать хэш-навигацию, не затрагивая историю?
Я боюсь, что это может быть невозможно, но есть ли способ изменить хэш-значение 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) не сохраняя, какая вкладка они в настоящее время если они нажмут обновить это раздражение.
5 ответов:
location.replace("#hash_value_here");работал нормально для меня, пока я не обнаружил, что он не работает на IOS Chrome. В этом случае используйте:history.replaceState(undefined, undefined, "#hash_value")история.replaceState() работает так же, как история.pushState () за исключением того, что replaceState () изменяет текущую запись истории вместо создания новой.
не забудьте сохранить
#или последняя часть url будет изменена.
Edit: прошло уже несколько лет, и браузеры эволюционировали.
@Luxiyalu это ответ путь
--Ответ--
Я тоже думаю, что это невозможно (на данный момент). Но зачем вам нужно изменить значение хэша, если вы не собираетесь его использовать?
Я считаю, что основная причина, по которой мы используем хэш-значение в качестве программистов, заключается в том, чтобы позволить пользователю добавлять закладки на наши страницы или сохранять состояние в история браузеров. Если вы не хотите делать ничего из этого, то просто сохраните состояние в переменной и работайте оттуда.
Я думаю, что причина использования хэша заключается в работе со значением, которое находится вне нашего контроля. Если вам это не нужно, то это, вероятно, означает, что у вас есть все под вашим контролем, поэтому просто сохраните состояние в переменной и работайте с ней. (Мне нравится повторяться)
Я надеюсь,что это поможет вам. Может быть, есть более простое решение вашей проблема.
обновление: Как насчет этого:
- установите первый хэш и убедитесь, что он сохраняется в истории браузера.
- когда выбрана новая вкладка, сделайте
window.history.back(1), Это заставит историю вернуться от вашего первого хэша инициализации.- теперь вы устанавливаете новый хэш, поэтому табуляция будет делать только одну запись в истории.
вам, вероятно, придется использовать некоторые флаги, чтобы узнать, может ли текущая запись быть "удалено", возвращаясь назад, или если вы просто пропустите первый шаг. И чтобы убедиться, что ваш метод загрузки для "хэша" не выполняется, когда вы заставляете
history.back.
вы всегда можете создать прослушиватель событий, чтобы поймать события щелчка по гиперссылке и в функции обратного вызова поставить e.preventDefault (), что должно помешать браузеру вставить его в историю.
Comments