Не видя ваш код, я не могу сказать, что вы делаете неправильно, но я могу описать, что работало для меня в прошлом.
Со стороны Silverlight вам нужно зарегистрировать класс в качестве объекта, который может быть написан в виде сценария. Затем создайте метод, помеченный как ScriptableMember и содержащий строку, которая будет передана в метод JavaScript. Я также добавил метод InvokeCallback, который будет вызывать переданный в javascript обратный вызов.
[ScriptableType]
public partial class Page : UserControl
{
private string jsCallback;
public Page()
{
InitializeComponent();
HtmlPage.RegisterScriptableObject("silverlightInterop", this);
}
[ScriptableMember]
public void RegisterCallback(string callback)
{
jsCallback = callback;
}
public boid InvokeCallback(string arg)
{
if(!string.IsNullOrEmpty(jsCallback))
{
System.Windows.Browser.HtmlPage.Window.Invoke(jsCallback, arg);
}
}
}
На стороне JavaScript вы можете вызвать метод RegisterCallback, который вы определили в Silverlight, взяв объект silverlight на странице и вызвав метод с именем «silverlightInterop», которое мы зарегистрировали как имя нашего объекта сценариев.
function jsCallback(someArg) {
alert(someArg);
}
var silverLightControl = document.getElementById("silverlightControl");
silverLightControl.content.silverlightInterop.RegisterCallback("jsCallback");
Надеюсь, это поможет. У меня также есть некоторый пример кода, демонстрирующий это, который я написал некоторое время назад здесь