从Silverlight设置URL哈希有时会失败

时间:2011-11-23 16:13:26

标签: javascript silverlight url silverlight-4.0

在我们的silverlight应用程序中,我们设置浏览器窗口的位置哈希属性,以便为当前控件和请求的查询参数添加书签。这是通过像Silverlight这样的javascript来完成的:

var hashCode = "Example.ControlNamespace.ClassName?clientID=62189";
HtmlPage.Window.Eval(string.Format("window.location.hash='{0}'", hashCode));

这种方法运行得很好,但是我们从生产中得到间歇性错误,而这种错误导致堆栈跟踪在该行结束时失败。

System.InvalidOperationException:Eval失败。    在System.Windows.Browser.HtmlWindow.Eval(String code)

这只会偶尔发生,但我想知道是什么导致它。我曾经能够使用IE8复制它,所以我认为没有任何模糊的浏览器导致这种情况。似乎设置哈希有时无效,但我不知道为什么。此外,如果它在安全连接上托管,重要的是https。

提前致谢。

编辑:我能够再次复制它。调试javascript时,错误是“权限被拒绝”。这似乎只发生在页面的第一次加载,所以可能页面没有完成加载,并且在完成之前不允许更改url哈希?

1 个答案:

答案 0 :(得分:4)

这可能与此特定问题有关:

Suppress navigation when setting HtmlPage.Window.CurrentBookmark property in Silverlight

我看到的行为是,当你在重定向后在IE中设置哈希值时,页面会刷新(而不是给你一个“权限被拒绝”),但也许还有其他情况,当你不被允许时这样做,例如,如果您在HTTPS下运行。

如果事实证明这是问题,我见过的唯一真正的解决方法是检测你是否处于那种情况下(即你在重定向后到达了这个页面,并且你正在运行在IE中),并在加载Silverlight应用程序之前刷新页面(使用JavaScript)。