【发布时间】:2011-11-23 16:13:26
【问题描述】:
在我们的silverlight 应用程序中,我们将浏览器窗口的位置哈希属性设置为书签当前正在请求的控件和查询参数。这是通过 Silverlight 通过 javascript 完成的,如下所示:
var hashCode = "Example.ControlNamespace.ClassName?clientID=62189";
HtmlPage.Window.Eval(string.Format("window.location.hash='{0}'", hashCode));
这工作得很好,但我们会从生产中得到间歇性错误,因为堆栈跟踪在该行结束时失败。
System.InvalidOperationException:评估失败。 在 System.Windows.Browser.HtmlWindow.Eval(字符串代码)
这只是偶尔发生,但我想知道是什么原因造成的。我曾经自己使用 IE8 就能够复制它,所以我认为没有任何晦涩的浏览器会导致这种情况。好像有时候设置hash是无效的,不知道为什么。此外,如果它托管在安全连接上很重要,https。
提前致谢。
编辑:我能够再次复制它。调试 javascript 时,错误是“权限被拒绝”。这似乎只发生在页面的第一次加载时,所以可能页面没有完成加载,并且在完成之前不允许更改 url 哈希?
【问题讨论】:
-
您是否尝试过通过
System.Windows.Browser.HtmlPage.Window.Navigate(Uri)或System.Windows.Interop.SilverlightHost.NavigationState = ...设置哈希?它奏效了吗?在所有这些情况下,我都看到了稍微不同的行为,所以这可能是有道理的。 -
另外,我怀疑 HTTPS 是原因。我们的应用程序大量使用哈希导航,并且在 HTTPS 下运行,我没有看到任何问题。但是,我们观察到 HTTPS 由于协议引起的不同事件时间的变化而影响了不相关的行为。
-
@Pavel Gatilov - 我还没有尝试过其他设置哈希的方法...我会试一试。
标签: javascript silverlight url silverlight-4.0