2010-01-29 45 views
2

我試圖訪問屬性的RootVisual對象:訪問的Silverlight 3.0應用程序從JavaScript

[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" /> 

這不起作用。我想知道爲什麼!提前致謝。

回答

4

有兩件事是錯誤的。

Silverlight的文檔

關於這方面的功能,Silverlight的文件是真的很困惑。這裏是東西,在onLoad方法中作爲sender參數提供的對象不是文檔所說的,它是而不是的silverlight插件。

至少它不是HTML DOM/Javascript所看到的插件。它似乎是某種框架元素的Javascript API版本的某種形式。爲了獲得對我們有用的插件對象,我們需要調用其上的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

MainPage刪除[ScriptableType],在這種情況下,你只需要標記特定成員可用的腳本,因此您使用[ScriptableMember]。通過使用[ScriptableType],您可以將所有公共成員自動公開爲腳本。你在ApplicationInfo上正確地做到了這一點。

+0

@Anthony:+1!感謝您的詳細回覆。從未聽說過getHost()!我在文檔中看到的所有內容都是get_elements():) MainPage上的[ScriptableType]是我的一廂情願!偉大的信息...我會嘗試確認...謝謝! – 2010-01-31 06:12:11

+0

謝謝!有效! – 2010-02-01 23:38:23

相關問題