Silverlight Web部件在用户单击页面之前不会加载

时间:2014-09-15 22:38:59

标签: internet-explorer sharepoint silverlight-4.0 web-parts

我正在维护一个在SharePoint中作为Web部件运行的Silverlight 4应用程序。但是,我在Internet Explorer(版本10和11)中加载它时遇到问题。用户必须单击Web页面或单击选项卡才能实际加载Silverlight Web部件。但是,这不是Chrome中的问题。当页面最初加载时会运行silverlight.js脚本,但是(在Fiddler中)显示XAP在用户单击或打击页面上的选项卡之前不会被调用。到目前为止,我已尝试使用和不使用ActiveX加载页面。此外,我尝试使用自己的JavaScript文件运行页面,点击并将焦点放在页面中的各个元素上,但到目前为止还没有运气。

我注意到在以下Stack Overflow问题的评论中简要引用了这个问题:     Why won't my Silverlight Application load in Internet Explorer?,但我尚未遇到任何解决此问题的决议。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如果您设置了对象标记的高度和宽度,或者从DIV容器中删除了可以解决问题的对象标记,我已经阅读了。如果这对您来说更容易,那么您可能想先尝试一下。

然而,我用一点点javascript解决了这个问题。我使用的是JQuery,但你可以用纯粹的javascript做类似的事情。

这是我的代码在修改之前的样子:

<div id="silverlightControlHost">
        <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%" id="silverObj">
          <param name="source" value="../MySilverlightApp.xap"/>
          <param name="onError" value="onSilverlightError" />
          <param name="background" value="white" />
          <param name="minRuntimeVersion" value="4.0.50826.0" />
          <param name="autoUpgrade" value="true" />
          <a href="http://www.microsoft.com/getsilverlight/get-started/install/default.aspx" style="text-decoration:none">
              <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/>
          </a>
        </object>
       <iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe>
</div>

这就是修改后的代码的样子,基本上我只是从#silverlightControlHost DIV中删除了所有内容,然后在通过JQuery加载页面后将所有内容放回到DIV中:

<script type="text/javascript">
  $(document).ready(function() {
    $("#silverlightControlHost").html("<object data='data:application/x-silverlight-2,' type='application/x-silverlight-2' width='100%' height='100%' id='silverObj'><param name='source' value='../MySilverlightApp.xap'/><param name='onError' value='onSilverlightError' /><param name='background' value='white' /><param name='minRuntimeVersion' value='4.0.50826.0' /><param name='autoUpgrade' value='true' /><a href='http://www.microsoft.com/getsilverlight/get-started/install/default.aspx' style='text-decoration:none'><img src='http://go.microsoft.com/fwlink/?LinkId=161376' alt='Get Microsoft Silverlight' style='border-style:none'/></a></object><iframe id='_sl_historyFrame' style='visibility:hidden;height:0px;width:0px;border:0px'></iframe>");
  });
</script>

<div id="silverlightControlHost">

</div>

作为参考,我没有在IE 8上看到这个问题,但后来在IE 11上使用相同版本的SharePoint,相同版本的Silverlight,相同的代码,同样的一切我遇到的问题是Silverlight控件不会加载直到你点击它应该在的空白区域。点击它之后,一切都会加载得很好。我首先尝试使用JQuery单击该对象,但这不起作用。它需要实际用户点击它,而不是编程点击。上面的Javascript / JQuery解决方案解决了这个问题,现在它在IE 8加载时加载。我还在IE 8,IE 11和Chrome版本42.0.2311.90 m(64位)中测试了此修复程序。我的Silverlight应用程序正在加载到Sharepoint 2010站点的Web部件中。