+2  A: 

There are two things wrong.

Silverlight Documentation

The Silverlight documentation about this area of functionality is really quite confused. Here is thing, the object provided as the sender parameter in the onLoad method isn't what the documentation says that it is, it's not the silverlight plugin.

At least its not the plugin as seen by the HTML DOM / Javascript. It seems to be some form of the Javascript API version of a Framework element. In order to get the plugin object that is useful to us we need to call the getHost method on it.

function onPluginLoaded(sender) {
   var plugin = sender.getHost();
}

That gets us one step closer.

Accessing Registered Scriptable Objects

Scriptable objects that have been registered on HTMLPage are accessed as properties of the Plugin's Content property. Hence to access the ApplicationInfo object you would need:-

function onPluginLoaded(sender) {
   var plugin = sender.getHost();
   var appInfo = plugin.Content.myapp.ApplicationInfo;
   alert(appInfo.Name + " " + appInfo.Version);
}

That'll get you going.


ScriptableType

Remove [ScriptableType] from MainPage, in this case you only want to mark specific members as available to script hence you use the [ScriptableMember]. By using [ScriptableType] you expose all public members automatically as scriptable. You are correctly doing that on your ApplicationInfo.

AnthonyWJones
@Anthony: +1! Appreciate your detailed reply. Never heard of getHost()! All I saw in the documentation was get_elements() :) The [ScriptableType] on the MainPage was my wishful thinking! Great info... I'll try it confirm... Thanks!
Vyas Bharghava
Thanks! It worked!
Vyas Bharghava