Ниже приведен код для открытия диалогового окна, который содержал контроль 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 В параметре :
<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 инициализация никогда не вызывается более чем один раз
Надежда все это имеет смысл, - но я должен был задокументировать для будущего ref
Да, довольно сложная настройка. но удастся найти ответ. Я добавлю его ниже. – amun1000
От Tech perceptive все в порядке. Это еще один способ, как это можно сделать и будет работать точно. Также вы можете найти этот разговор полезным http://stackoverflow.com/questions/1874866/how-to-fire-onload-event-on-document-in-ie о onLoad –