2011-06-13 41 views
1

我正在使用Silverlight,並且我們有幾個控件(.ascx文件),它們在文件的html部分包含以下代碼。這應該是你如何在網頁中正確包含Silverlight,以及下面的代碼的作用。額外的腳本代碼只是檢查是否必要的Silverlight.xap文件被緩存,如果是,則不會嘗試再次下載它。如何預先將網頁中的Silverlight預取到客戶端緩存中

<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文件,並且理想地在後臺中,因此用戶不會注意到這樣,當他們最終到達帶有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] 

我不知道如果我想做一些無法完成的事情,但任何輸入都會非常有幫助。

回答

0

XAP文件只是一個資源,您可以指向任何圖像或CSS文件。您可以嘗試的一種方法是將其加載到隱藏的0x0圖像標記中。

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

您是否啓用Application Library Caching?這會使問題複雜化。另一種選擇是ComponentOne XapOptimizer,它是一種可大幅減少XAP文件大小的商業產品。