0

Привет У нас есть элемент управления silverlight, размещенный в скрытом div (и высоте 0px), который затем отображается в диалоговом окне jquery, когда пользователь нажимает кнопку на странице . Начальный показ диалога вызывает onLoad param и правильно инициализирует управление silverlight. Однако у пользователя есть возможность закрыть диалоговое окно и скрыть элемент управления silverlight.Кэширование управления Silverlight в IE

Пользователь может затем показать это диалоговое окно еще раз (без перезагрузки страницы), однако в IE параметр onLoad не запущен, и поэтому наш элемент управления silverlight не инициализирован правильно, так как мы обрабатываем аппаратное обеспечение внутри него. Однако в Chrome параметр onLoad запускается каждый раз, когда отображается диалоговое окно jquery.

Два очень разных поведения. Я не могу удалить скрытый div из dom, поскольку он может понадобиться снова

Есть ли решение для принудительной перезагрузки элемента управления silverlight, так что параметр onLoad запускается каждый раз, когда элемент управления отображается в диалоговом окне jquery?

ТИА Эндрю

ответ

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> 

Annotate класс как это:

[ScriptableType] 
    public partial class SomePage: UserControl 
    { 

Annotate подходящий метод внутри SomePage

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

где данные повторной инициализации PARAMS ...

надеюсь, что это поможет

+0

Да, довольно сложная настройка. но удастся найти ответ. Я добавлю его ниже. – amun1000

+0

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

<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

 Смежные вопросы

  • Нет связанных вопросов^_^