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

推荐订阅源

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探秘]利用Javascript调用silverlight的方法 encodeURI/decodeURI与UrlEncode/UrlDecode,噩梦在继续 [MapEasy]浅析ListenerSupport 技术人,什么才是你的成功? [Flash FileUpload]用flash.net.FileReference实现ASP.NET无刷新文件上传 [SmartScript]js类库管理不再发愁
[Silverlight探秘]利用Silverlight调用Javascript的方法
浪子 · 2007-06-20 · via 博客园 - 浪子

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

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

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

摘要:

在上文[Silverlight探秘]利用Javascript调用silverlight的方法中,我们探讨了,如何利用javascript来调用silverlight的托管方法。这个相对来说比较好办些,因为Silverlight毕竟兼容DOM的object方式调用,但是反过来就比较麻烦了,因为javascript设计者不可能那么早就想到为silverlight开个接口:)

本文环境:

  • Codename Orcas Beta1
  • Silverlight 1.1 Alpha
  • IE 6.0

思路:

即然没办法从Silverlight直接调用javascript对象,那我们只能从和它们都有关系的DOM的object调用上下手了。要实现互操作,首先Silverlight必须提供一个可供javascript操作的对象,也就是[Silverlight探秘]利用Javascript调用silverlight的方法中我们所提到[Scriptable]标签,但是单单这样子还是不够的。我们这里的场景是Silverlight只提供的函数定义,而javascript实例函数实现,然后在Silverlight里面调用。想想这个场景,跟我们以前的什么应用有点类似哦,没错就是委托(或者使用事件Event)。即然场景类似,我们就动手测试下,看是否行得通。

编写Silverlight的托管方法:

[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();
//注册按钮事件
            btnCallScript.MouseLeftButtonUp += new MouseEventHandler(btnCallScript_MouseLeftButtonUp);
}
void btnCallScript_MouseLeftButtonUp(object sender, MouseEventArgs e)
{
if (CallScript != null)
{
//CallScript(this, new MyEventArgs("called by server!"));
CallScript(this, EventArgs.Empty);
}
}
//注册客户端可访问的事件定义
[Scriptable]
public event EventHandler CallScript;
}
跟上文相比,这里只是把SayHello换成了Event而已,其他没有太大的变化
客户端注入方法到事件上:
function createSilverlight()
{
Sys.Silverlight.createObjectEx({
source: "Page.xaml",
parentElement: document.getElementById("SilverlightControlHost"),
id: "SilverlightControl",
properties: {
width: "100%",
height: "100%",
version: "0.95",
enableHtmlAccess: true
},
events: {
onLoad: OnLoaded
}
});
}
function OnLoaded(sender,args){
//debugger;
sender.Content.LangZi.CallScript = OnCallScript;
}
function OnCallScript(sender, args){
//debugger;
alert("Running!");
}
扩展思路:
这里用的是最普通的EventHandler,是否支持自定义的EventHandler,支持到什么程度,有待进一步研究。
本文测试代码:SilverlightCallJavascript.rar