Как остановить запись истории браузера Silverlight NavigationState / изменения закладки? - PullRequest
1 голос
/ 14 октября 2010

У нас есть проект Silverlight Prism со сложной информацией о состоянии, хранящейся в закладке браузера.Это позволяет нам делиться закладками / ссылками, которые вернут приложение в точно такое же визуальное состояние.

Однако мы не хотим, чтобы тривиальные изменения закладок (т.е. изменения без навигации) приводили кзапись в истории браузера.В противном случае кнопки браузера «назад» и «вперед» также вносят простые изменения (такие как простой выбор списка, выбор вкладок и т. Д.).

В: Есть ли способ изменить URL-адрес закладки браузера, но исключить его?из истории браузера или (если это не так) возможно ли удалить записи из истории браузера?

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

Спасибо

1 Ответ

0 голосов
/ 15 октября 2010

Я сам создал один ответ, но предпочел бы не полагаться на функции JavaScript. Мне также нужно проверить, поддерживается ли window.location.replace всеми браузерами.

Теперь я вызываю этот метод с флагом, чтобы сказать, хочу ли я игнорировать закладки в истории браузера:

public void NavigateToBookmark(string bookMarkUrl, bool replaceUrl)
{
    if (replaceUrl)
    {
        HtmlPage.Window.Invoke("NavReplace", bookMarkUrl);
    }
    else
    {
        HtmlPage.Window.NavigateToBookmark(bookMarkUrl);
    }
}

затем добавьте этот JavaScript на страницу хостинга Silverlight:

 function NavReplace(url) {
            var newurl = parent.location.href;
            var index = newurl.indexOf("#");
            if (index > 0) {
                newurl = newurl.substr(0, newurl.indexOf("#"));
            }
            window.location.replace(newurl + "#" + url);
        }

Кто-нибудь хочет получить лучший способ сделать это?

...