12

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

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

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


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

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

几点观察:

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

现在我的问题:

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

6 回答 6

6

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

我尝试添加上面建议的 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() ">
...
于 2013-02-11T00:32:29.503 回答
3

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

不过,这对我来说非常有效:

window.onbeforeunload = function () {
            var silverlightControlHost = document.getElementById("silverlightControlHost");
            silverlightControlHost.innerHTML = "";
        }
于 2014-04-16T23:54:39.370 回答
1

我以一种非常简单的方式解决了这个问题。我在页面末尾(或在您的 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 应用程序对象之后编写的。

于 2014-03-05T01:49:21.297 回答
0

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

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

于 2013-01-11T04:16:44.860 回答
0

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

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

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

您可以从 Microsoft 的官方错误报告平台 Connect 网站对这个问题进行投票。

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

干杯

于 2013-06-03T02:00:07.017 回答
0

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

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

于 2013-06-05T14:11:21.680 回答