惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
博客园 - Franky
GbyAI
GbyAI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
爱范儿
爱范儿
IT之家
IT之家
酷 壳 – CoolShell
酷 壳 – CoolShell
aimingoo的专栏
aimingoo的专栏
博客园_首页
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recent Announcements
Recent Announcements
Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
C
CERT Recently Published Vulnerability Notes
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Jina AI
Jina AI
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
L
LangChain Blog
L
LINUX DO - 最新话题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Hacker News: Front Page
MyScale Blog
MyScale Blog
P
Palo Alto Networks Blog
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
AI
AI
T
Troy Hunt's Blog
Microsoft Azure Blog
Microsoft Azure Blog
阮一峰的网络日志
阮一峰的网络日志
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Vercel News
Vercel News
Microsoft Security Blog
Microsoft Security Blog
罗磊的独立博客
S
Secure Thoughts
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
S
Security @ Cisco Blogs
Cloudbric
Cloudbric
E
Exploit-DB.com RSS Feed
Attack and Defense Labs
Attack and Defense Labs

博客园 - 浪子

LINQ TO Reflection(反射) 你真的懂HTML吗-从"最新闪存"说起 LINQ TO SQLite实践指南 [TDD]由SearchCriteriaBinder看Test Driven与Test First [OpenSource] ScriptLoader V5:不一样的体验,客户端分布式缓存平台 [OpenSource] ScriptLoader V4:与组件系统共舞,让分享更清晰 [OpenSource]ScriptLoaderV2:彻底改变你的编程习惯 [OpenSource]ScriptLoader: 轻松管理你的js 类库 关于Windows Mobile 6 Professional Emulator中的一个串口设置小问题. 文件被数字签名策略拒绝(File was rejected by digital signature policy) [开源第一波]SmartScript Ajax中动态执行返回到innerHTML中的js [Silverlight探秘]深入探索Silverlight与Javascript的交互 [Silverlight探秘]利用Silverlight调用Javascript的方法 encodeURI/decodeURI与UrlEncode/UrlDecode,噩梦在继续 [MapEasy]浅析ListenerSupport 技术人,什么才是你的成功? [Flash FileUpload]用flash.net.FileReference实现ASP.NET无刷新文件上传 [SmartScript]js类库管理不再发愁
[Silverlight探秘]利用Javascript调用silverlight的方法
浪子 · 2007-06-19 · via 博客园 - 浪子

********************************************************************
*                                                 版权声明
*
* 本文以Creative Commons的知识共享署名-非商业性使用-相同方式共享发布,请严格遵循该授权协议。
* 本文首发于博客园, 此声明为本文章中不可或缺的一部分。
* 作者网名:    浪子
* 作者EMAIL:dayichen (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