2009-02-24 3 views
1

У меня есть приложение Silverlight с использованием C# с двумя основными функциями, которые я хочу сделать доступными из функций JavaScript. Я сделал RegisterScriptableObject() в классе и установил [ScriptableMember] для функций, к которым я хочу получить доступ.Javascript, вызывающий функцию C# под Silverlight

Это Silverlight, объект:

<div id="silverlightControlHost"> 
    <object id="silverlightControl" data="data:application/x-silverlight," type="application/x-silverlight-2" width="1024px" height="300px"> 
     <param name="source" value="DrawingWaveForm.xap"/> 
     <param name="onerror" value="onSilverlightError" /> 
     <param name="background" value="white" /> 
     <param name="minRuntimeVersion" value="2.0.31005.0" /> 
     <param name="autoUpgrade" value="true" /> 
     <a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"> 
      <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/> 
     </a> 
    </object> 
    <iframe style='visibility:hidden;height:0;width:0;border:0px'></iframe> 
</div> 

и это мои функции JavaScript:

function Start() 
    { 
     var control = document.getElementById("silverlightControl");    
     control.Content.Page.Start(); 
    } 

    function Stop() 
    { 
     var control = document.getElementById("silverlightControl");    
     control.Content.Page.Stop(); 
    } 

Может кто-нибудь сказать мне, где я собираюсь неправильно, как это не похоже на работу

+0

Я получаю следующее сообщение об ошибке: Ошибка: неперехваченное исключение: свойство установки ошибки в скриптовом объекте с возможностью скриптов! [исключение плагина: объект не поддерживает это свойство или метод]. – williamtroup

+0

Было бы такой же проблемой, на что ответили по этой ссылке? [Javascript для Silverlight, когда Silverlight instanciated с тегом объекта] (http://stackoverflow.com/questions/1639862/javascript-to-silverlight-when-silverlight-instanciated-with-object-tag) – bperreault

ответ

2

Как сказал timheuer, [Scriptable] по вашим методам Silverlight.

Зов это в своем классе:

HtmlPage.RegisterScriptableObject("Page", this); 

Вызовите Silverlight методы, помеченные как Scriptable из вашего JavaScript, как это:

function CenterMap(latitude, longitude) 
{ 
    var silvercontrol = document.getElementById("ctl00_cphMain_slControl"); 
    if (silvercontrol) 
    silvercontrol.Content.Page.CenterOnCoordinates(latitude, longitude); 
} 

This page показывает это и как сделать наоборот, вызов JavaScript методы из Silverlight. Это действительно хорошая модель.

+0

Игнорируйте грязный жестко управляемый идентификатор: p a nice завершает работу. var silverlightControl = $ ("[id $ = 'slControl']"); –

0

Это просто мысль, но вам, возможно, нужно сделать методы общедоступными (они, похоже, не в вашем коде)?

+0

Я пробовал это и это не сработало, на самом деле это остановило мои другие функции, работающие также. – williamtroup

1

Вам необходимо убедиться, что ваши функции C# отмечены как Scriptable. См. http://silverlight.net/learn/learnvideo.aspx?video=65683 для некоторых проходов, как это сделать.

+0

Я сделал это, добавил [ScriptableMember] над обеими функциями, но все равно получаю сообщение: Ошибка: неперехваченное исключение: свойство установки ошибки в объекте плагинов scriptable! [исключение плагина: объект не поддерживает это свойство или метод]. – williamtroup

0

Я сам просто стучал по этой проблеме. Первая функция js работает, но все остальное вызывает эту ошибку. После того, как я возился, я заметил, что смена основной функции C#, которая успешно работала, не имела никакого влияния - браузер работал с кешированной версией элемента управления Silverlight. Попробуйте очистить кеш браузера.

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