Silverlight和js之间的相互操作

前言

最近在silverlight开发中,SL需要和js进行交互,研究了下怎么使用。

SL调用js方法

这个很简单一句代码就完成了:

HtmlPage.Window.Invoke("MethodName","para-1",...,"para-n");

说明:上述方法的第一个参数为js的方法名,第2-n个参数为js方法的参数。

示例(以设置SL的Height属性为例):

将object的ID定义为"slDemo",则有如下的js代码:

复制代码
 1 <script type="text/javascript">
 2 var slHeight = 650;
 3 function silverlightResize(targetHeight) {
 4             if (targetHeight != undefined) {
 5                 slHeight = targetHeight;
 6             }
 7             if (isNaN(slHeight)) {
 8                 slHeight = 450;
 9             }
10             var frameHeight = 0;
11             if (! +[1, ]) { //IE
12                 frameHeight = document.documentElement.clientHeight - 50;
13             }
14             else { //其它浏览器
15                 frameHeight = window.innerHeight - 50;
16             }
17             if (isNaN(frameHeight)) {
18                 frameHeight = slHeight;
19             }
20             slHeight = Math.max(slHeight, frameHeight);
21             //alert(slHeight);
22             $("#slDemo").height(slHeight);
23         }
24  </script>
复制代码

在SL中的调用为:

 HtmlPage.Window.Invoke(“silverlightResize”, "600");

注:上述js代码使用了jquery

js中调用SL方法

在js中操作SL方法时,

1.需要先注册托管对象以便用于通过 JavaScript 代码的可脚本化访问。注册方法定义如下(摘自MSDN):

复制代码
public static void RegisterScriptableObject(
string scriptKey,
Object instance
)


参数
scriptKey
类型:System..::..String

用于注册托管对象的名称。

instance
类型:System..::..Object

一个托管对象。
复制代码

示例代码(我们指定注册对象的名称为“Test”)app.xaml中:

复制代码
1         private void Application_Startup(object sender, StartupEventArgs e)
2         {
3             HtmlPage.RegisterScriptableObject("Test", this);
4 
5             this.RootVisual = new MainPage();
6         }
复制代码

2.MainPage.xaml要使得某个方法能被js调用还需要在该方法上使用特性:[ScriptableMemberAttribute]。示例代码:

1         [ScriptableMember]
2 public void TestMethod(string param)
3 {
4 MessageBox.Show(param);
5 }

3.sl加载时获取sl实例,并通过上述定义的名称“Test”调用sl中的方法“TestMethod”。js示例如下:

复制代码
 1     <script type ="text/javascript">
 2         var slDemo = null;
 3         function callSL() {            
 4             slDemo.Content.Test.TestMethod("测试js调用sl");
 5         }
 6 
 7         function onSilverlightLoad(sender) {
 8             slDemo = sender.getHost(); 
 9         }
10     </script>
复制代码

4.在page中加入一个测试按钮,并修改sl参数信息,代码如下:

复制代码
 1 <form id="form1" runat="server" style="height:100%">
2 <div> <button οnclick="callSL()">测试</button></div>
3 <div id="silverlightControlHost">
4 <object id = "slDemo" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
5 <param name="source" value="ClientBin/SL_Demo.xap"/>
6 <param name="onError" value="onSilverlightError" />
7 <param name="onLoad" value="onSilverlightLoad" />
8 <param name="background" value="white" />
9 <param name="minRuntimeVersion" value="4.0.50826.0" />
10 <param name="autoUpgrade" value="true" />
11 <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0" style="text-decoration:none">
12 <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="获取 Microsoft Silverlight" style="border-style:none"/>
13 </a>
14 </object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div>
15 </form>
复制代码
作者: ps_zw
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值