0

嗨我們有一個Silverlight控件託管在一個隱藏的div(和高度爲0px),然後顯示在一個jQuery對話框中,當用戶點擊頁面上的按鈕時 對話框的初始顯示調用onLoad param並正確初始化silverlight控件。但是用戶可以選擇關閉對話框並隱藏Silverlight控件。然後在IE中的Silverlight控件緩存

用戶可以再顯示此對話框(無需重新加載頁面),然而,在IE中的onLoad參數是不會激發,因此,因爲我們在它處理硬件我們的Silverlight控件沒有正確初始化。在Chrome中,然而,在onLoad參數是每次射擊jQuery的對話框顯示

兩個非常不同的行爲。我不能從dom中刪除隱藏的div,因爲它可能需要再次

是否有強制重新加載Silverlight控件的解決方案,以便參數onLoad是每次使用jquery對話框顯示控件時觸發的?

TIA 安德魯

回答

0

不知道我有一個總體思路。提高onLoad絕對不好。 但讓我建議上面的解決方案。在JS

註冊通信對象(又名函數)和Silverlight爲好。所以,你將能夠傳達JS - > Silverlight的

<script type="text/javascript"> 
    function updateSilverlight() { 
     // call silverlight control method 
     var control = document.getElementById("silverlightControl"); 
     control.Content.Page.SomeMethod("someData'); 
    } 
</script> 

註釋類是這樣的:裏面SomePage的

[ScriptableMember] 
     public void SomeMethod(string somedata) 
     { 
      var data = somedata; 
     } 

[ScriptableType] 
    public partial class SomePage: UserControl 
    { 

標註相應的方法,其中的數據是你重新初始化參數...

希望幫助

+0

是相當複雜的設置。但設法找到一個答案,我會將它添加到 – amun1000

+0

從技術洞察力,它是好的。這只是另一種方式,它可以做到,並且可以肯定地工作。 此外,你可能會發現,對話有用http://stackoverflow.com/questions/1874866/how-to-fire-onload-event-on-document-in-ie about onLoad –

0

下面是一個包含Silverlight控件

$('#ReadCard').on('click', function (e) { 

    $('#silverlightControlHost').height('300'); 

    e.preventDefault(); 

    //show the read card dialog 
    $("#readCardDialog").dialog({ 
     autoOpen: true, 
     height: 390, 
     width: 550, 
     modal: true, 
     resizable: false, 
     buttons: { 
      'Close': function() { 
       Call_SL_OnBeforeUnload(); 
       $(this).dialog("close"); 
      } 
     } 
    }); 
}); 

在裝載Silverlight控件有一個方法調用SilverlightInitialisation打開對話框代碼:

function onSilverlightLoad(sender, eventargs) { 
    ..... 
    pluginElem.Content.SR_SMT.SilverlightInitialisation(inputArray); 
    } 

這是所謂由可選的Silverlight paramater :

<param name="onload" value="onSilverlightLoad" /> 

這開始了silverlight控件與之對話的硬件。

當對話框被關閉的方法被調用來停止硬件:

Call_SL_OnBeforeUnload(); 

然而,當在IE瀏覽器再次顯示該對話框的SilverlightInitialisation方法不會被調用,除非用戶將刷新頁面。

一個解決是改變方法(onLoad)實現對Silverlight控件打開對話框時總是叫但查了標誌(hasLoaded),看看它以前加載:

的Silverlight

[ScriptableMember] 
    public string OnLoad() 
    { 
     string retVal = G4T.SilverlightBadge.Resources.ResourcesFile.Present_Card; 

     if (_badgeReadCtrl != null && hasLoaded) 
     { 
      if (!_badgeReadCtrl.Initialise()) 
      { 
       retVal = "Failed to initialise reader device"; 
      } 
     } 

     return retVal; 
    } 

加入該OnFirstLoad方法第一次加載的Silverlight控制時被稱爲並設置標誌相應

[ScriptableMember] 
    public string OnFirstLoad() 
    { 
     string retVal = G4T.SilverlightBadge.Resources.ResourcesFile.Present_Card; 

     if (_badgeReadCtrl != null) 
     { 
      if (!_badgeReadCtrl.Initialise()) 
      { 
       retVal = "Failed to initialise reader device"; 
      } 
     } 
     hasLoaded = true; 
     return retVal; 
    } 

的Javascript

open: function (event, ui) { 
      try { 
       var plugin = document.getElementById('SilverlightMainControl'); 
       if (plugin) { 
        plugin.Content.SR_SMT.OnLoad(); 
       } 
      } 
      catch(e){} 
     }, 

就像我上面這個總是在Chrome的工作沒有修改,但在IE中說初始化沒有被調用不止一次

希望這一切是有道理的 - 但我不得不將其記錄下來以備將來參考