SilverLight浏览器交互之:Html页面通过Javascript调用SilverLight程序内方法(附源码)
概述:
SilverLight运行浏览器时,像Ajax一样可以在Html页面通过Javascript调用SilverLight程序内方法。
效果:
[ScriptableMember]
指示可由 JavaScript 调用方访问的特定属性、方法或事件。
为了调用SilverLight项目中的方法,我们必须指定该方法能否被Javascript调用
HtmlPage.RegisterScriptableObject 方法
注册托管对象以便用于通过 JavaScript 代码的可脚本化访问。
为了使浏览能够通过Javascript访问SilverLight程序,必须先声明该SilverLight程序能被Javascript调用。
Xaml代码:
<Grid x:Name="LayoutRoot" Background="YellowGreen">
</Grid>
SilverLight CS代码:
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
//HtmlPage.RegisterScriptableObject 方法
//注册托管对象以便用于通过 JavaScript 代码的可脚本化访问。
HtmlPage.RegisterScriptableObject("Button", this);
}
/// <summary>
/// 执行网络服务
/// [ScriptableMember]指示可由 JavaScript 调用方访问的特定属性、方法或事件。
/// </summary>
[ScriptableMember]
public void ExecuteWebService()
{
MessageBox.Show("我是SilverLight项目中的MessageBox","o(∩_∩)o 哈哈",MessageBoxButton.OK);
}
}
好现在我们看看怎么在Html页面调用SilverLight 代码:
创建一个SilverLight插件,使Javascript可以调用插件里面注册的方法。
<!--
通常会使用这个对象标签方法 创造Silverlight插件
-->
<body style="height: 100%;">
<div id="mySilverlightHost" style="height: 100%;">
<script type="text/javascript">
var host = document.getElementById("mySilverlightHost");
//创建一个指定的对象并返回对它的引用。
Silverlight.createObjectEx({
//设置创建对象的数据来源
source: "ClientBin/ReferencingFromScript.xap",
//设置对象层次的父对象
parentElement: host,
//设置唯一标识id
id: "mySilverlightControl",
//设置属性
properties: {
height: "100%",
width: "100%",
version: "2.0"
},
events: {}
});
</script>
</div>
<input type="button" onclick="buttonClick();" value="调用SilverLight方法" />
</body>
写Javascript类来调用方法:
<head>
<title>Silverlight Project Test Page </title>
<script type="text/javascript" src="Silverlight.js"></script>
<script type="text/javascript">
function buttonClick() {
//获取SilverLight插件中 以创建的对象
var plugin = document.getElementById("mySilverlightControl");
//执行SilverLight项目中已经注册的可被Javascript调用的方法
plugin.content.Button.ExecuteWebService();
}
</script>
</head>
大功告成!!!
作者:记忆逝去的青春
出处:http://www.cnblogs.com/lukun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过http://www.cnblogs.com/lukun/ 联系我,非常感谢。