【问题标题】:Silverlight app disappears on page refresh in IE10Silverlight 应用程序在 IE10 中的页面刷新时消失
【发布时间】:2012-11-09 15:10:37
【问题描述】:

更新:有解决该问题的方法。它是通过包含以下元标记之一来强制 IE10 进入兼容模式:

<meta http-equiv="x-ua-compatible" content="IE=7" />
<meta http-equiv="x-ua-compatible" content="IE=8" />

由于各种原因,这并不是一个真正完美的解决方案,但它至少消除了问题。


原始问题:
几个月前,我意识到我们在 Windows 8 上的 IE10 中的 Silverlight 应用程序存在问题(我还没有尝试过 Windows 7 的 IE10 预览版)。当托管我们的 SL 应用程序的 asp.net 页面首次加载时,一切正常,应用程序按预期加载。如果我立即刷新页面,它也会按预期重新加载。但是:如果我通过单击来聚焦 Silverlight 应用程序,然后按 F5,它就会变成空白。就像插件完全消失了一样。如果我使用 Fiddler 跟踪请求,我可以看到没有为 xap 文件发出请求。我一直希望这会在 IE10 的补丁版本中得到修复,但到目前为止没有任何改变。当我尝试谷歌搜索时,我找不到任何关于此的信息。我似乎不太可能成为第一个发现它的人,而且我很惊讶我没有找到更多信息。重现问题:

  • 创建一个新的 Silverlight 应用程序
  • 向 MainPage.xaml 添加某种内容,例如按钮或其他内容
  • 在 IE10 中运行应用程序(在 Win8 上)
  • 单击 Silverlight 应用程序中的任意位置。这只是为了关注插件。
  • 刷新页面 (F5)
  • 结果:Silverlight 应用程序未加载且页面为空白。

一些观察:

  • 完成上述步骤后,再多的刷新也无法恢复应用程序。
  • 完成上述步骤后,如果我在地址栏中重新输入 url 并按 Enter,应用程序将按预期加载。
  • 如果我在 IE 中启用兼容性视图,应用程序也会按预期加载。启用兼容性视图后,我所做的任何事情都不会重现该错误。

现在我的问题:

  1. 有其他人观察到这种行为吗?
  2. 如果是,您是否找到了解决方法?

【问题讨论】:

  • Chris 的解决方案很有魅力,我认为这是一个很好的解决方法。

标签: silverlight internet-explorer windows-8 refresh internet-explorer-10


【解决方案1】:

在回答您的问题 1 时,我们的 Silverlight 应用程序也会发生这种情况。唯一的解决方法是 1) 重新启动浏览器或 2) 切换到兼容模式。

这显然是 ie10 中的一个错误。

【讨论】:

  • 我现在被 MS 告知这是 IE 中的一个已知错误。他们无法告诉我什么时候会修复它,但暗示它可能会在 2013 年第二季度得到解决。所以要解决这个问题还需要一段时间。
【解决方案2】:

我的 Silverlight 应用程序在 IE 10 中遇到了同样的问题。

我已尝试添加上面建议的 IE 8 兼容性元标记,但这并不能始终如一地解决问题。在说每 5 次刷新尝试之后,它似乎只是间歇性地工作?!

我认为解决此问题的唯一方法是强制浏览器模式进入“IE 10 兼容性视图”,我认为这不能通过页面内容(元标记等)来完成?我不得不删除 IE 8 兼容性元标记,以便地址栏中的“兼容性视图”按钮可用,然后要求用户单击兼容性按钮,然后网站会记住该按钮。这导致浏览器进入浏览器模式:“IE 10 Compat View”和文档模式:“IE7 标准”。然后,刷新行为会按预期和以前一样始终如一地工作。

这对我们来说是个大问题。我们已经构建了 Silverlight 应用程序,以便使用浏览器刷新按钮来刷新应用程序内的页面/内容(用户保持登录状态等)。我们必须要求用户将我们的网站设置为在兼容模式下运行才能使刷新功能按预期工作,这真的很糟糕。

请注意,这在 Chrome 中仍然可以正常工作。由于这个问题,我们可能需要建议我们的用户使用 Chrome,这似乎很愚蠢!

更新:

解决方法似乎是始终使用 JavaScript 将 Silverlight 对象动态加载到其托管页面中。

例如

function onLoad() {
  var silverlightControlHost = document.getElementById("silverlightControlHost");
  silverlightControlHost.innerHTML = "<object ...

更新 2:

这是我用来解决此问题的最新代码:

...
        function unloadSilverlight() {
            document.getElementById("silverlightControlHost").innerHTML = "";
        }

        function focusOnSilverlight() {
            document.getElementById("silverlightObject").focus();
        }

        function onLoad() {
            window.onbeforeunload = unloadSilverlight;
            setTimeout(focusOnSilverlight);
        }
    </script>
</head>
<body onload=" onLoad() ">
...

【讨论】:

  • 仅供参考,我为此提出了 Microsoft Connect 错误:connect.microsoft.com/IE/feedback/details/778920
  • 这个答案的更新是唯一对我有用的东西 - 谢谢伙伴。
  • @Chris:当你写下你的答案时,我错过了这个。它完美地工作,谢谢。我将此标记为答案。
【解决方案3】:

感谢所有解决方法,但这显然是 Silverlight 插件的错误。

我们直接向 Internet Explorer 开发团队提出了一些问题,他们说问题来自外部问题。这不是微软的好答案。

无论如何,这次我们的开发人员通过 Silverlight 开发团队提出了票,仍在等待他们的回应。为了得到他们的良好回应,我们需要让更多的人面临这个问题。

您可以在 Microsoft 的官方错误报告平台 Connect 网站上投票。

我们票的链接是:http://connect.microsoft.com/VisualStudio/feedback/details/789004/ie10-shows-blank-page-upon-refreshing-silverlight-app

干杯

妈妈

【讨论】:

  • 你是对的,这是来自微软的一个糟糕的答案。尤其是他们的一位支持技术人员向我保证,该问题已被确认为 IE 中的错误,并有望在 2013 年 4 月之前得到修复。我已在 Connect 网站上对此问题发表了评论。我还将了解如何通过 MS 支持重新打开此问题。如果您可以直接与 IE 开发团队取得联系,也许您可​​以让他们检查该错误的情况。这是给我的信息:ID:25188,DB:Windows Blue Bugs
【解决方案4】:

是的,我的一个应用程序也面临同样的问题。如果我在 IE 10 中打开我的应用程序的帮助,那么我每次都必须刷新页面才能查看内容。

我有两个解决这个问题的方法: 1.按ALT键一次 2. 以兼容模式打开IE

【讨论】:

    【解决方案5】:

    我以一种非常简单的方式解决了这个问题。我在页面末尾(或在您的 silverlight 应用程序所在的对象标记之后)编写了一个 javascript 代码,并将焦点设置到另一个元素,例如链接。示例:

    <object id="silverlightHostControl">...bla bla bla</object> <script type="text/javascript" language="javascript"> var shc = document.getElementById("silverlightHostControl"); document.getElementById("myLink").focus(); </script>

    shc var 没用,我只是为了澄清。请记住:您的 javascript 代码必须在 silverlight 应用程序对象标记被解析后将焦点设置到另一个(但可聚焦的)对象,这意味着您的 js 代码是在 silverlight 应用程序对象之后编写的。

    【讨论】:

      【解决方案6】:

      我对 Chris 提出的解决方案仍有疑问。

      这对我来说非常适合:

      window.onbeforeunload = function () {
                  var silverlightControlHost = document.getElementById("silverlightControlHost");
                  silverlightControlHost.innerHTML = "";
              }
      

      【讨论】:

      • 很好,这也适用于我。它比onLoad 方式更简单,并且在 FF 中也没有给我任何问题。
      猜你喜欢
      • 2013-07-16
      • 2011-02-14
      • 2020-08-28
      • 1970-01-01
      • 2012-09-21
      • 2021-04-21
      • 2015-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多