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

Silverlight应用程序在IE10页面刷新时消失,silverlight,internet-explorer,windows-8,refresh,internet-explorer-10,Silverlight,Internet Explorer,Windows 8,Refresh,Internet Explorer 10,更新:有一个解决问题的方法。通过包括以下元标记之一,强制IE10进入兼容模式: <meta http-equiv="x-ua-compatible" content="IE=7" /> <meta http-equiv="x-ua-compatible" content="IE=8" /> 出于各种原因,这并不是一个完美的解决方案,但至少它消除了问题 原始问题: 几个月前,我意识到Windows8上IE10中的Silverlight应用程序存在问题(我还没有尝试W

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

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

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


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

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

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

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

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


    这显然是ie10中的一个bug

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

    我已经尝试添加上面建议的IE8兼容性元标记,但这并不能一致地解决问题。它似乎只是断断续续地工作,在说每第五次刷新尝试之后

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

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

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

    更新:

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

    例如

    函数onLoad(){
    var silverlightControlHost=document.getElementById(“silverlightControlHost”);
    
    silverlightControlHost.innerHTML=“感谢所有解决方案,但这显然是Silverlight插件的一个缺陷

    我们已经直接向InternetExplorer开发团队提出了一些问题,他们说这个问题是由外部问题引起的。这不是微软的好答案

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

    您可以在Connect网站上投票,该网站是微软的官方bug报告平台

    我们的机票链接是:

    干杯


    Moh

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

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

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

    …呜呜呜呜呜呜
    var shc=document.getElementById(“silverlightHostControl”);
    document.getElementById(“myLink”).focus();
    


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

    我仍然对Chris提出的解决方案存在问题

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

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

    我现在已经被微软告知这是IE中的一个已知错误。他们无法告诉我何时会修复,但暗示它可能会在2013年第二季度得到解决。所以这需要一段时间才能解决。仅供参考,我提出了一个Microsoft Connect错误:美国
    ...
            function unloadSilverlight() {
                document.getElementById("silverlightControlHost").innerHTML = "";
            }
    
            function focusOnSilverlight() {
                document.getElementById("silverlightObject").focus();
            }
    
            function onLoad() {
                window.onbeforeunload = unloadSilverlight;
                setTimeout(focusOnSilverlight);
            }
        </script>
    </head>
    <body onload=" onLoad() ">
    ...
    
    window.onbeforeunload = function () {
                var silverlightControlHost = document.getElementById("silverlightControlHost");
                silverlightControlHost.innerHTML = "";
            }