Kevin Dente
Kevin Dente

Reputation: 25738

Call Silverlight methods from Javascript by name

Is it possible to get a reference to a Silverlight method purely by name from Javascript, and then invoke it? With pure Javascript objects you would be something like this:

var f = theObj["theMethodName"];    
f.call(theObj, "an arg");

But treating a Silverlight object as an associative array doesn't seem work.

I'm guessing I could probably use Eval as a last resort, but I'd rather avoid it.

Upvotes: 1

Views: 1649

Answers (3)

Shrike
Shrike

Reputation: 9500

This works:

theObj["theMethodName"]("an arg");    

But this does not:

theObj["theMethodName"].apply(null, "an arg");

at least I didn't manage to use apply (and call) :(

Upvotes: 0

Jon Galloway
Jon Galloway

Reputation: 53115

The question is on how to call a Silverlight function from Javascript by name. You can easily call methods on an object directly by enabling a method for scripting using the ScriptableMember attribute, but you can't invoke it as a string directly.

I think you're stuck with eval.

Upvotes: 2

Shawn Wildermuth
Shawn Wildermuth

Reputation: 7458

HtmlPage.Window.Invoke("theMethodName", "An arg");

OR

var obj = HtmlPage.Document.GetElementByID("theObj"); obj.Invoke("theMethodName", "an Arg");

...

Ah, re-reading it...no, no access to the reflection API. You'd have to expose it formally. Its still a managed object...just exposed as an 'object' in JScript. So not the same as a prototype object.

Upvotes: 1

Related Questions