博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一步一步学Silverlight 2系列(21):如何在Silverlight中调用JavaScript
阅读量:5326 次
发布时间:2019-06-14

本文共 2698 字,大约阅读时间需要 8 分钟。

概述

Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython,对JSON、Web Service、WCF以及Sockets的支持等一系列新的特性。《一步一步学Silverlight 2系列》文章将从Silverlight 2基础知识、数据与通信、自定义控件、动画、图形图像等几个方面带您快速进入Silverlight 2开发。

Silverlight中内置了对于HTML、客户端脚本等的支持。很多情况下,我们编写的Web应用程序中用了一些JavaScript或者AJAX框架,我们希望能够在Silverlight调用某些脚本方法,或者说在Silverlight中触发某个脚本的执行,这时就需要用到在Silverlight中调用JavaScript,本文将简单介绍这一内容。

使用GetProperty获取脚本对象

先来看一个简单的例子,在Silverlight测试页面中放入一个div用作显示信息:

编写一段简单的JavaScript代码:

再编写一个简单的输入信息界面:

实现对脚本的调用:

private void submit_Click(object sender, RoutedEventArgs e){    ScriptObject hello = HtmlPage.Window.GetProperty("Hello") as ScriptObject;    hello.InvokeSelf(this.input.Text);}

ScriptObject提供了任何客户端脚本的封装,不仅仅是JavaScript,使用其他的AJAX框架也可以,如jQuery等。然后调用InvokeSelf()方法,传入参数,这里ScriptObject总共提供了两个方法,Invoke和InvokeSelf,如果我们只调用脚本对象的自身,就可以使用InvokeSelf,如果脚本对象中还有其它的函数等,可以使用Invoke传入名称进行调用,两个方法的定义如下:

[SecuritySafeCritical]public virtual object Invoke(string name, params object[] args);[SecuritySafeCritical]public virtual object InvokeSelf(params object[] args);

运行上面的示例:

 TerryLee_Silverlight2_0097

输入TerryLee后点击调用,可以看到确实调用了客户端脚本:

TerryLee_Silverlight2_0098 

使用CreateInstance创建脚本对象

除了使用上面所说的使用HtmlPage.Window.GetProperty方法获取脚本对象之外,还有一种替代方法,即使用HtmlPage.Window属性的CreateInstance方法。还是使用上面的示例,我们在测试页中加入如下一段脚本,使用prototype为myHello添加了显示的功能:

使用HtmlPage.Window.CreateInstance创建脚本对象

private void submit_Click(object sender, RoutedEventArgs e){    ScriptObject script = HtmlPage.Window.CreateInstance("myHello",this.input.Text);    object result = script.Invoke("Display");}

运行后的效果跟上面的示例是一样的,如:

TerryLee_Silverlight2_0097

输入文本信息后:

TerryLee_Silverlight2_0099 

使用HtmlPage.Window.Eval()

最后还有一种机制,就是使用HtmlPage.Window.Eval()方法,只要我们给该方法传入一段字符串,它都会作为JavaScript来执行。做一个简单的测试,我们再修改一下上面的示例代码:

private void submit_Click(object sender, RoutedEventArgs e){    HtmlPage.Window.Eval(this.input.Text);}

运行后我们在文本框中输入一段脚本alert('TerryLee');,效果如下所示:

TerryLee_Silverlight2_0100

既然HtmlPage.Window.Eval()可以执行一段脚本,并且将执行的结果以对象形式返回,我们可以使用它来获取DOM元素。如下面这段代码:

private void submit_Click(object sender, RoutedEventArgs e){    HtmlElement result = HtmlPage.Window.Eval("document.getElementById('result')") as HtmlElement;    string message = result.GetAttribute("innerHTML");    HtmlPage.Window.Alert(message);}

运行后效果如下,获取的result确实就是我们定义的div。

TerryLee_Silverlight2_0101 

对AJAX框架的支持

前面说过,ScriptObject不仅仅是对JavaScript的封装,也支持其它的AJAX框架,现在我们用jQuery来测试一下,编写一小段代码:

调用脚本

private void submit_Click(object sender, RoutedEventArgs e){    ScriptObject script = HtmlPage.Window.GetProperty("myHello") as ScriptObject;    script.InvokeSelf(this.input.Text);}

运行后的结果与前面的示例是一样的:

TerryLee_Silverlight2_0102 

结束语

本文介绍了在Silverlight中调用JavaScript的几种方法,下一篇我将介绍如何在JavaScript中调用Silverlight。

转载于:https://www.cnblogs.com/Areas/archive/2011/08/25/2153355.html

你可能感兴趣的文章
delphi 内嵌汇编例子
查看>>
SQL server 2012 安装SQL2012出现报错: 启用 Windows 功能 NetFx3 时出错
查看>>
【luogu P2298 Mzc和男家丁的游戏】 题解
查看>>
前端笔记-bom
查看>>
MATLAB作图方法与技巧(一)
查看>>
上海淮海中路上苹果旗舰店门口欲砸一台IMAC电脑维权
查看>>
Google透露Android Market恶意程序扫描服务
查看>>
给mysql数据库字段值拼接前缀或后缀。 concat()函数
查看>>
迷宫问题
查看>>
【FZSZ2017暑假提高组Day9】猜数游戏(number)
查看>>
泛型子类_属性类型_重写方法类型
查看>>
eclipse-将同一个文件分屏显示
查看>>
mysql5.x升级至mysql5.7后导入之前数据库date出错的解决方法!
查看>>
对闭包的理解
查看>>
练习10-1 使用递归函数计算1到n之和(10 分
查看>>
Oracle MySQL yaSSL 不明细节缓冲区溢出漏洞2
查看>>
windows编程ASCII问题
查看>>
.net webService代理类
查看>>
Code Snippet
查看>>
Node.js Express项目搭建
查看>>