下面是一個包含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中說初始化沒有被調用不止一次
希望這一切是有道理的 - 但我不得不將其記錄下來以備將來參考
是相當複雜的設置。但設法找到一個答案,我會將它添加到 – amun1000
從技術洞察力,它是好的。這只是另一種方式,它可以做到,並且可以肯定地工作。 此外,你可能會發現,對話有用http://stackoverflow.com/questions/1874866/how-to-fire-onload-event-on-document-in-ie about onLoad –