Можете ли вы использовать хэш-навигацию, не затрагивая историю?



Я боюсь, что это может быть невозможно, но есть ли способ изменить хэш-значение 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) не сохраняя, какая вкладка они в настоящее время если они нажмут обновить это раздражение.

586   5  

5 ответов:

location.replace("#hash_value_here"); работал нормально для меня, пока я не обнаружил, что он не работает на IOS Chrome. В этом случае используйте:

history.replaceState(undefined, undefined, "#hash_value")

история.replaceState() работает так же, как история.pushState () за исключением того, что replaceState () изменяет текущую запись истории вместо создания новой.

не забудьте сохранить # или последняя часть url будет изменена.

location.replace("#hash_value_here"); 

выше, кажется, делать то, что вы после.

Edit: прошло уже несколько лет, и браузеры эволюционировали.

@Luxiyalu это ответ путь

--Ответ--

Я тоже думаю, что это невозможно (на данный момент). Но зачем вам нужно изменить значение хэша, если вы не собираетесь его использовать?

Я считаю, что основная причина, по которой мы используем хэш-значение в качестве программистов, заключается в том, чтобы позволить пользователю добавлять закладки на наши страницы или сохранять состояние в история браузеров. Если вы не хотите делать ничего из этого, то просто сохраните состояние в переменной и работайте оттуда.

Я думаю, что причина использования хэша заключается в работе со значением, которое находится вне нашего контроля. Если вам это не нужно, то это, вероятно, означает, что у вас есть все под вашим контролем, поэтому просто сохраните состояние в переменной и работайте с ней. (Мне нравится повторяться)

Я надеюсь,что это поможет вам. Может быть, есть более простое решение вашей проблема.

обновление: Как насчет этого:

  1. установите первый хэш и убедитесь, что он сохраняется в истории браузера.
  2. когда выбрана новая вкладка, сделайте window.history.back(1), Это заставит историю вернуться от вашего первого хэша инициализации.
  3. теперь вы устанавливаете новый хэш, поэтому табуляция будет делать только одну запись в истории.

вам, вероятно, придется использовать некоторые флаги, чтобы узнать, может ли текущая запись быть "удалено", возвращаясь назад, или если вы просто пропустите первый шаг. И чтобы убедиться, что ваш метод загрузки для "хэша" не выполняется, когда вы заставляете history.back.

history.replaceState(undefined, undefined, "#profileInfo")

здесь #profileInfo - Это ваш ID.

вы всегда можете создать прослушиватель событий, чтобы поймать события щелчка по гиперссылке и в функции обратного вызова поставить e.preventDefault (), что должно помешать браузеру вставить его в историю.

Comments

    Ничего не найдено.