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

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

96
задан 27 February 2019 в 03:25
поделиться

1 ответ

Вы можете делать именно то, что пытаетесь. Отсутствует только пользовательский конструктор, вызывающий конструктор по умолчанию:

struct Animal
{
    public string name = ""; 
    public static int weight = 20; 

    public Animal(bool someArg) : this() { }
}

Конструктор должен взять хотя бы один параметр, а затем переслать this () для инициализации членов.

Причина, по которой это работает, заключается в том, что компилятор теперь имеет возможность обнаружить время, когда код должен выполняться для инициализации поля name : всякий раз, когда вы пишете new Animal (someBool) .

С любой структурой вы можете сказать new Animal () , но «пустые» животные могут быть созданы неявно во многих обстоятельствах в работе CLR, и нет способа гарантировать, что пользовательский код будет выполняться каждый раз, когда это произойдет.

-121--2166450-

Я не уверен, насколько точно в вашем приложении иерархически находятся FureEndBoard и BoardCell, но вам может потребоваться сообщить событию «newMove», что оно может пузырь .

var e:Event = new Event("newMove", true);
-121--4293644-

Изменить: Прошло уже пару лет, и браузеры развивались.

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

-- Старый ответ --

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

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

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

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

ОБНОВЛЕНИЕ: Как насчет этого:

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

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

6
ответ дан 24 November 2019 в 05:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: