如何将Web页面中的Silverlight预取到客户端缓存中

时间:2011-06-13 21:27:17

标签: c# html silverlight

我正在使用Silverlight,我们有几个控件(.ascx文件),它们在文件的html部分包含下面的代码。这应该是你如何在网页中正确包含Silverlight,以下代码可行。额外的脚本代码只检查是否缓存了必要的Silverlight.xap文件,如果是,则不会尝试再次下载。

<div>
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
    <%
        string orgSourceValue = @"bin/Silverlight.xap";
        string param;
        if (System.Diagnostics.Debugger.IsAttached)
            param = "<param name=\"source\" value=\"" + orgSourceValue + "\" />";
        else
        {
            string xappath = HttpContext.Current.Server.MapPath(@"") + @"\" + orgSourceValue;
            DateTime xapCreationDate = System.IO.File.GetLastWriteTime(xappath);
            param = "<param name=\"source\" value=\"" + orgSourceValue + "?ignore="
            + xapCreationDate.ToString() + "\" />";
        }
        Response.Write(param);
    %>
<param name="onError" value="onSilverlightError" />
<param name="background" value="white" />
<param name="minRuntimeVersion" value="3.0.40624.0" />
<param name="autoUpgrade" value="true" />
</object> <iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div>

现在我的任务是弄清楚是否可以预取或预先缓存.xap文件。原因是因为.xap文件是我们的自定义文件,需要加载一些,所以我们希望它预先加载到实际使用Silverlight之前的页面上。例如,我们的网站有一个简单的表单登录页面,该页面进入菜单页面,您可以在其中选择要加载的Silverlight应用程序。我想要做的是,例如,当用户单击登录按钮时加载.xap文件,或者甚至在加载登录页面时加载.xap文件,理想情况是在后台加载。所以用户不会注意到它,所以当他们最终到达具有Silverlight内容的页面时,它已准备好并缓存。试图将上面的代码粘贴到未运行Silverlight的页面的html部分只会导致无限刷新循环和警告消息“此请求无法处理。错误已记录”,我注意到错误显示在错误控制台中:

Error: uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMWindowInternal.alert]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "<unknown>"  data: no]

我不知道如果我想做一些无法做到的事情,但任何输入都会非常有帮助。

1 个答案:

答案 0 :(得分:0)

XAP文件只是一个可以指向任何Image或CSS文件的资源。您可以尝试的一种方法是将其加载到隐藏的0x0图像标记中。

<img src="http://youdomain.com/clientbin/your.xap" style="display: none; width: 0px; height: 0px;" />

您是否启用了Application Library Caching?这会使问题复杂化。另一个选择是ComponentOne XapOptimizer,它是一种商业产品,可以大大减少XAP文件的大小。