【问题标题】:Setting URL hash from Silverlight sometimes failing从 Silverlight 设置 URL 哈希有时会失败
【发布时间】: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


【解决方案1】:

这可能与这里的特定问题有关:

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

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

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

【讨论】:

  • 有趣。我没有注意到页面试图刷新,但我会留意的。
猜你喜欢
  • 1970-01-01
  • 2020-11-01
  • 1970-01-01
  • 2011-04-22
  • 2021-02-05
  • 2018-04-26
  • 1970-01-01
  • 2023-02-23
  • 1970-01-01
相关资源
最近更新 更多