如何停止Silverlight浏览器历史记录导航状态/书签更改?

时间:2010-10-14 13:03:57

标签: silverlight silverlight-4.0 navigation prism bookmarks

我们有一个Silverlight Prism项目,其中包含存储在浏览器书签中的复杂状态信息。这允许我们共享书签/链接,将应用程序恢复到完全相同的视觉状态。

但是,我们不希望琐碎的书签更改(即非导航更改)导致浏览器历史记录条目。否则,浏览器后退/前进按钮也会进行简单的更改(例如简单列表选择,选项卡选择等)。

问:有没有办法仍然更改浏览器书签网址,但是将其从浏览器历史记录中排除,或者(如果没有)是否可以从浏览器历史记录中删除条目?

我们的视觉状态是优先考虑的,因此我们知道哪些实际应该影响导航,哪些只是用于装饰。这可以在URL更改之前或之后确定,因此您的答案可以使用任何一种情况。我们可以为书签添加一个特定的标记,表明它不应该存档,如果这也有助于您的解决方案。

谢谢

1 个答案:

答案 0 :(得分:0)

我自己创建了一个答案,但不想依赖JavaScript功能。 我还需要检查所有浏览器是否支持window.location.replace。

我现在用一个标志调用这个方法,说我是否想在浏览器历史记录中忽略书签:

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

然后在Silverlight托管页面中添加此JavaScript:

 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);
        }

有没有更好的方法来做这件事?