[Silverlight探秘]利用Javascript调用silverlight的方法

简介:

********************************************************************
*                                                 版权声明
*
* 本文以Creative Commons的知识共享署名-非商业性使用-相同方式共享发布,请严格遵循该授权协议。
* 本文首发于博客园, 此声明为本文章中不可或缺的一部分。
* 作者网名:    浪子
* 作者EMAILdayichen (at)163.com
* 作者BLOG:  Http://Www.Cnblogs.Com/Walkingboy
*
********************************************************************

[Silverlight探秘]利用Javascript调用silverlight的方法

-Written by 浪子@cnblogs.com  (07-06-19)

摘要:

在引入sl的时候,我最关心的是,如何和现有的很多成熟代码结合?或者说如何在两者之间进行交互。

本文从js如何调用silverlight的方法入手,接下来再学习如何从silverlight调用js方法,慢慢深入学习它们两者之间的交互知识

本文环境:

  • Codename Orcas Beta1
  • Silverlight 1.1 Alpha
  • IE 6.0

创建Silverlight工程:

JavascriptCallSilverlight_Project

编写Silverlight的托管方法:

当然silverligh可以使用多种托管语言,我这里使用c#。

   public partial class Page : Canvas
{
public void Page_Loaded(object o, EventArgs e)
{
// Required to initialize variables
InitializeComponent();
}
public string SayHello(string name)
{
return "hello," + name;
}
}
这里我们只在原来的基础上定义了一个public 的方法SayHello,返回一string
要让客户端可以访问到这个方法,需要做以下工作:
1、引入System.Windows.Browser;
using System.Windows.Browser;

 

2、为类和方法贴上标签

   [Scriptable]
public partial class Page : Canvas
{
public void Page_Loaded(object o, EventArgs e)
{
// Required to initialize variables
InitializeComponent();
}
[Scriptable]
public string SayHello(string name)
{
return "hello," + name;
}
}
3、在Canvas创建的时候,为这个类注册一个客户端访问实例
public Page()
{
WebApplication.Current.RegisterScriptableObject("LangZi", this);
}

 

最终代码如下:

     [Scriptable]
    public partial class Page : Canvas
    {
        public Page()
        {
            WebApplication.Current.RegisterScriptableObject("LangZi", this);
        }

        public void Page_Loaded(object o, EventArgs e)
        {
            // Required to initialize variables
            InitializeComponent();
        }

        [Scriptable]
        public string SayHello(string name)
        {
            return "hello," + name;
        }
    }

使用Javascript调用SayHello:
     1、获取Canvas的实例引用
var control = document.getElementById("SilverlightControl");

获取Canvas的dom容器元素。
2、获取Page的实例引用 ,注意刚才我们注册的实例名称”LangZi“

var manage = control.Content.LangZi;

3、调用方法SayHello:

alert(manage.SayHello(name));

 
有了这种沟通方式,以前很多在javascript里运算的函数,可能就可以放到托管代码里进行运算,可能会提高很大的效率哦。
不过这个返回值不知道支持到何种程度(返回自定义类是否被转换为json格式?),还有待进一步测试。
本文的测试代码:JavascriptCallSilverlight.rar


本文转自浪子博客园博客,原文链接:http://www.cnblogs.com/walkingboy/archive/2007/06/19/JavascriptCallSilverlight.html,如需转载请自行联系原作者
目录
相关文章
|
9月前
|
监控 负载均衡 JavaScript
有哪些有效的方法可以优化Node.js应用的性能?
有哪些有效的方法可以优化Node.js应用的性能?
461 69
|
8月前
|
JavaScript Linux 内存技术
Debian 11系统下Node.js版本更新方法详解
本指南详细介绍在Linux系统中安装和管理Node.js的步骤。首先检查现有环境,包括查看当前版本和清除旧版本;接着通过NodeSource仓库安装最新版Node.js并验证安装结果。推荐使用nvm(Node Version Manager)进行多版本管理,便于切换和设置默认版本。同时,提供常见问题解决方法,如权限错误处理和全局模块迁移方案,以及版本回滚操作,确保用户能够灵活应对不同需求。
778 0
|
8月前
|
JavaScript Linux 内存技术
Debian 11系统下Node.js版本更新方法
Debian 11更新Node.js主要就是这三种方式,无论你是初涉其中的新手还是找寻挑战的专家,总有一种方式能满足你的需求。现在,你已经是这个
910 80
|
JavaScript 前端开发 程序员
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
397 1
|
Web App开发 JavaScript 前端开发
如何确保 Math 对象的方法在不同的 JavaScript 环境中具有一致的精度?
【10月更文挑战第29天】通过遵循标准和最佳实践、采用固定精度计算、进行全面的测试与验证、避免隐式类型转换以及持续关注和更新等方法,可以在很大程度上确保Math对象的方法在不同的JavaScript环境中具有一致的精度,从而提高代码的可靠性和可移植性。
|
监控 JavaScript Java
Node.js中内存泄漏的检测方法
检测内存泄漏需要综合运用多种方法,并结合实际的应用场景和代码特点进行分析。及时发现和解决内存泄漏问题,可以提高应用的稳定性和性能,避免潜在的风险和故障。同时,不断学习和掌握内存管理的知识,也是有效预防内存泄漏的重要途径。
1003 159
|
10月前
|
JavaScript 前端开发 Java
js 垃圾回收机制的方法
JS回收机制方法讲解
|
11月前
|
JavaScript 前端开发 Java
深入理解 JavaScript 中的 Array.find() 方法:原理、性能优势与实用案例详解
Array.find() 是 JavaScript 数组方法中一个非常实用和强大的工具。它不仅提供了简洁的查找操作,还具有性能上的独特优势:返回的引用能够直接影响原数组的数据内容,使得数据更新更加高效。通过各种场景的展示,我们可以看到 Array.find() 在更新、条件查找和嵌套结构查找等场景中的广泛应用。 在实际开发中,掌握 Array.find() 的特性和使用技巧,可以让代码更加简洁高效,特别是在需要直接修改原数据内容的情形。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一
|
JavaScript 前端开发
.js方法参数argument
【10月更文挑战第26天】`arguments` 对象为JavaScript函数提供了一种灵活处理参数的方式,能够满足各种不同的参数传递和处理需求,在实际开发中具有广泛的应用价值。
400 63