Доступ к приложению Silverlight 3.0 из JavaScript - PullRequest
2 голосов
/ 29 января 2010

Я пытаюсь получить доступ к свойствам объекта RootVisual:

</p> <pre><code>[ScriptableType] public class ApplicationInfo { public string Name { get; set; } public string Version { get; set; } } [ScriptableType] public partial class MainPage : UserControl { [ScriptableMember] public ApplicationInfo ApplicationInfo { get; set; } public MainPage() { InitializeComponent(); this.ApplicationInfo = new ApplicationInfo(); this.ApplicationInfo.Name = "My Application"; this.ApplicationInfo.Version = "0.1"; HtmlPage.RegisterScriptableObject("myapp", this); } }

На моей странице хостинга ASPX есть следующий фрагмент JavaScript:

<script type="text/javascript">
    function onPluginLoaded(plugin) {
        alert('in plugin');
        alert(plugin.Name);  //This gives me the x:Name of the RootVisual object
        var appInfo = plugin.ApplicationInfo;
        alert(appInfo);
        alert(plugin.myapp);
        document.title = appInfo.Name + " " + appInfo.Version;
    }
</script>



<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%" OnPluginLoaded="onPluginLoaded" >
<param name="source" value="ClientBin/SLVersion.xap"/>
<param name="onload" value="onPluginLoaded" />

Это не работает. Я хотел бы знать почему! Заранее спасибо.

1 Ответ

4 голосов
/ 31 января 2010

Есть две неправильные вещи.

Документация Silverlight

Документация Silverlight об этой области функциональности действительно запутана.Дело в том, что объект, предоставленный в качестве параметра sender в методе onLoad, не соответствует тому, что говорится в документации, это не плагин silverlight.

По крайней мере, это не плагинкак видно из HTML DOM / Javascript.Кажется, это какая-то форма Javascript API-версии элемента Framework.Чтобы получить полезный для нас объект плагина, нам нужно вызвать для него метод getHost.

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

Это приблизит нас на один шаг.

ДоступЗарегистрированные объекты сценариев

Объекты сценариев, зарегистрированные в HTMLPage, доступны как свойства свойства Content плагина.Следовательно, чтобы получить доступ к ApplicationInfo объекту, вам понадобится: -

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

Это поможет вам.

ScriptableType

Удалите [ScriptableType] из MainPage, в этом случае вы хотите пометить только определенные элементы как доступные для сценария, поэтому вы используете [ScriptableMember].Используя [ScriptableType], вы автоматически выставляете всех открытых участников в виде сценариев.Вы правильно делаете это на своем ApplicationInfo.

...