我正在尝试访问 RootVisual 对象的属性:
<前>[脚本类型]
公共(public)类应用程序信息
{
公共(public)字符串名称{获取;放; }
公共(public)字符串版本{获取;放; }
}
[脚本类型]
公共(public)部分类 MainPage : UserControl
{
[脚本化成员]
公共(public)应用程序信息应用程序信息{获取;放; }
公共(public)主页()
{
初始化组件();
this.ApplicationInfo = new ApplicationInfo();
this.ApplicationInfo.Name = "我的应用程序";
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" />
这行不通。我想知道为什么!提前致谢。
最佳答案
有两件事是错误的。
Silverlight 文档
有关此功能领域的 Silverlight 文档确实相当困惑。事情是这样的,在 onLoad 方法中作为 sender 参数提供的对象并不是文档所说的那样,它不是 silverlight 插件。
至少它不是 HTML DOM/Javascript 所看到的插件。它似乎是某种形式的 Framework 元素的 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]
,您可以自动将所有公共(public)成员公开为可编写脚本。您在 ApplicationInfo
上正确执行了此操作。
关于c# - 从 JavaScript 访问 Silverlight 3.0 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2159525/