在IE10页面刷新时,Silverlight应用程序消失

Hen*_*und 12 silverlight internet-explorer refresh windows-8 internet-explorer-10

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

<meta http-equiv="x-ua-compatible" content="IE=7" />
<meta http-equiv="x-ua-compatible" content="IE=8" />
Run Code Online (Sandbox Code Playgroud)

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


原始问题:
几个月前我意识到在Windows 8上的IE10中我们的Silverlight应用程序存在问题(我还没有尝试过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. 如果是这样,你找到了解决方法吗?

Chr*_*ris 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 ...
Run Code Online (Sandbox Code Playgroud)

更新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() ">
...
Run Code Online (Sandbox Code Playgroud)