Боюсь, это может быть невозможно, но есть ли способ изменить хеш-значение 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) не удерживать, на какой вкладке они сейчас находятся, если они нажимают обновление, раздражение.
Ответы:
location.replace("#hash_value_here");
отлично работал у меня, пока я не обнаружил, что он не работает в IOS Chrome. В этом случае используйте:Не забудьте сохранить
#
или последняя часть URL-адреса будет изменена.источник
window.location.hash = 'my-hash';
послеhistory.replaceState(undefined, undefined, "#my-hash")
?history.replaceState
отличается отlocation.replace
?Вышеупомянутое, похоже, делает то, что вам нужно.
источник
window.location.replace(('' + window.location).split('#')[0] + '#' + hash);
просто обновить хеш<base href ="http://example.com/" />
если он содержит базовый тег , тогда, когда вы используете метод replace только с ведущими,"#hash_value_here"
это будет выглядеть так, как если бы вы сказали `location.replace (' example.com/#hash_value_here' ). Это кажется очевидным, когда вы читаете это здесь, но это ошибка, когда вы находитесь на странице с фрагментом пути и не понимаете, что база установлена.Изменить: прошло пару лет, и браузеры эволюционировали.
@ Luxiyalu в ответ это путь
- Старый ответ -
Я тоже думаю, что это невозможно (в настоящее время). Но зачем вам менять хеш-значение, если вы не собираетесь его использовать?
Я считаю, что основная причина, по которой мы используем хеш-значение в качестве программистов, заключается в том, чтобы позволить пользователю добавлять наши страницы в закладки или сохранять состояние в истории браузера. Если вы не хотите ничего из этого делать, просто сохраните состояние в переменной и работайте оттуда.
Я думаю, что причина использования хеша заключается в том, чтобы работать со значением, которое находится вне нашего контроля. Если вам это не нужно, то это, вероятно, означает, что у вас все под вашим контролем, поэтому просто сохраните состояние в переменной и работайте с ним. (Мне нравится повторяться)
Я надеюсь, что это помогает вам. Может, у твоей проблемы есть более простое решение.
ОБНОВЛЕНИЕ: Как насчет этого:
window.history.back(1)
, это вернет историю из вашего первого хэша инициализации.Вам, вероятно, придется использовать некоторые флаги, чтобы знать, можно ли «удалить» текущую запись, вернувшись назад, или вы просто пропустите первый шаг. И чтобы убедиться, что ваш метод загрузки "хеша" не выполняется, когда вы принудительно загружаете файл
history.back
.источник
?mystate=greatness
), даже если она не обязательно должна быть ajax, вы можете сохранить информацию для чтения javascript при инициализации запроса.Вы всегда можете создать прослушиватель событий, чтобы улавливать события щелчка по гиперссылке, а в функции обратного вызова поместите e.preventDefault (), что должно помешать браузеру вставить его в историю.
источник