silverlight 中javascript 代码与托管代码的互调用 以及一些思考
silverlight 客户端javascript 代码与托管代码的互调用时比较用意义的同时,因为silverlight本身就是一个插件,如果两者之间不能进行相互的调用,对于web 上的一些特殊的功能是没法操作的。
以下为两者之间进行互操作的实现代码,以及最后一些在实际开发中的可以使用的地方。
1, javascript 调用托管代码 。
这个就比较有意思了,
/// <summary>
/// 注册的客户端可调用的托管代码
/// </summary>
[ScriptableType()]
public class CallClass
{
[ScriptableMember()]
public int Cal(int x, int y)
{
int z = x + y;
return z;
}
}
以上是我们需要客户端进行调用的托管代码,注意添加的属性ScriptableType 和ScriptableMember 之后就是进行托管代码的注册客户端可访问。
private void Application_Startup(object sender, StartupEventArgs e)
{
MainPage main = new MainPage();
CallClass cla = new CallClass();
HtmlPage.RegisterScriptableObject("SilverlightApplicationExample", cla);/// 注册方法
this.RootVisual = main;
}
主要是在应用程序启动是进行客户端可调用方法的注册。
客户端进行javascript的调用有几点需要注意:
<body>
<div id="demo" style="width:100%;height:30px;background-color:cadetblue;text-align:center">
<button id="Click" style="align-items:center;align-content:center" onclick="CallCode(3,100)" >调用</button>
</div>
<form id="form1" runat="server" style="height:29px;width:300px;">
<div id="silverlightControlHost">
<object id="silverlight" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
<param name="source" value="ClientBin/javascriptDemo.xap"/>
<param name="onError" value="onSilverlightError" />
<param name="background" value="white" />
<param name="onLoad" value="pluginLoaded"/>
<param name="minRuntimeVersion" value="5.0.61118.0" />
<param name="autoUpgrade" value="true" />
<a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=5.0.61118.0" style="text-decoration:none">
<img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="获取 Microsoft Silverlight" style="border-style:none"/>
</a>
</object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div>
</form>
</body>
以上为silverlight宿主客户端页面的界面 注意<param name="onLoad" value="pluginLoaded"/> 这个很有必要 ,通过这个我们可以获取silverlight 对象
<script type="text/javascript">
var slCtl = null;
function pluginLoaded(sender) {
slCtl = sender.getHost(); /// 获取silverlight 插件
alert(slCtl);
}
function Add(a,b)
{
return a + b;
}
function CallCode(a,b)
{
var result = slCtl.Content.SilverlightApplicationExample.Cal(a, b);
alert(result);
}
</script>
这个客户端的javascript代码。
pluginLoaded方法就是我们获取silverlight对象的。CallCode 方法就是进行托管代码调用的测试方法。另外一个Add 方式是托管代码调用javascript的方法,在此贴上,下面会用到。
界面如下:

2, 托管代码调用javascript。
javascript的方式是上边的Add
按钮call 的click代码如下:
private void Button_Click_1(object sender, RoutedEventArgs e)
{
//获取当前的HtmlWindows对象
HtmlWindow win = HtmlPage.Window;
// 获取客户端的javascript方法
ScriptObject sObj = win.GetProperty("Add") as ScriptObject;
// 执行方法
var result= sObj.InvokeSelf(4,33333);
MessageBox.Show(result.ToString());
}
以上就是互调用的方法。
3,一点思考。
记得有很长一段时间了,以为同学问我silverlight如何进行客户端串口通信,我以前是做过一些关于串口通信的系统,有桌面的也有web 的,对于silverlight是做过系统,但没有使用串口的,经过测试silverlight没有直接进行串口的API ,这就不太方便了,silverlight可以设计如此漂亮的界面,但是对于做串口数据的朋友就有点不太好了,一般我们的做法是使用Activex 插件进行本地串口数据的接受,并进行web 服务器端的处理,javascript可以方便的操作activex插件,但是silverlight就不行了,如果将两者结合起来不就可以解决了吗,当时是提出这样的技术方案,不知这位同学测实践过没有,现在写这篇博文主要是记录一下解决的方案,以及技术的总结。
H[ZT8~`]7F8(AXMLSE}BR.jpg)
H[ZT8~`]7F8(AXMLSE}BR.jpg)
silverlight 中javascript 代码与托管代码的互调用 以及一些思考的更多相关文章
- Cordova插件中JavaScript代码与Java的交互细节介绍
在Cordova官网中有这么一张架构图:大家看右下角蓝色的矩形框"Custom Plugin"--自定义插件.意思就是如果您用Cordova打包Mobile应用时,发现您的移动应用 ...
- 由闭包引起的对javascript代码可维护性的思考
在最近的编程实践中由闭包的使用引起了我对javascript代码可维护性的思考.面向对象的其中一个特性封装性通过封装可以降低类与类之间或模块与模块之间耦合性从而使我们的设计更加高内聚低耦合,在大规模的 ...
- MEF框架在Silverlight中应用(15)
原文:MEF框架在Silverlight中应用(15) MEF框架在Silverlight中应用 代码下载 MEF框架是微软提供的一个插件框架.应用概括为一句话:输入,输出,组合.下面是具体在Silv ...
- Cordova应用的JavaScript代码和自定义插件代码的调试
我之前写过三篇Cordova相关的技术文章.当我们使用Cordova将自己开发的前端应用打包安装到手机上后,可能会遇到需要调试Cordova应用的时候. 本文就介绍Cordova应用的调试步骤. 如果 ...
- 一步一步学Silverlight 2系列(22):在Silverlight中如何用JavaScript调用.NET代码
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 一步一步学Silverlight 2系列(21):如何在Silverlight中调用JavaScript
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 在HTML标签<a/>中调用javascript代码
<a/>标签的“href”属性可以是一个有效的URL,表示跳转的目的地,除此之外,href还可以是一段javascript代码.当为“href”设置javascript代码时,格式如下:& ...
- asp.net mvc页面javascript代码中如何使用razor
我们需要用<text>将javascript代码包含起来,强制让razor编译器回到内容模式, 或者将javascript代码放在函数中,让razor编译器可以识别,请看下面两个例子: & ...
- Android WebView中的JavaScript代码使用
在WebView中使用JavaScript 如果你想要载入的页面中用了JavaScript,你必须为你的WebView使能JavaScript. 一旦使能之后,你也可以自己创建接口在你的应用和Java ...
随机推荐
- 49 BOM 和DOM
一.BOM window 对象 1.确认,输入, window.alert(123) // 弹框 let ret = window.confirm("是否删除") / ...
- HDU-3480 Division (四边形不等式优化DP)
题目大意:将n个数分成m组,将每组的最大值与最小值的平方差加起来,求最小和. 题目分析:先对数排序.定义状态dp(i,j)表示前 j 个数分成 i 组得到的最小和,则状态转移方程为dp(i,j)=mi ...
- 每天一个linux命令(3):pwd
Linux中用 pwd 命令来查看”当前工作目录“的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的确切位置. ...
- 从客户端(......)中检测到有潜在危险的 Request.Form 值
在提交表单时候,asp.net 提示:"从客户端(......)中检测到有潜在危险的 Request.Form 值" .asp.net中的请求验证特性提供了某一等级的保护措施防止X ...
- Generate PDF in Sourcing through concurrent request,在EBS java并发中调用指定am的方法
package oracle.apps.pon.printing.cp; import java.io.InputStream; import java.io.FileOutputStream; im ...
- 【转】C# 生成二维码并且在中间加Logo(图片合并)
public class QRCodeHelper { public static Bitmap GetThumbnail(Bitmap b, int destHeight, int destWidt ...
- 算法笔记_025:字符串的全排列(Java)
目录 1 问题描述 2 解决方案 2.1 递归实现 2.2 字典序排列实现 1 问题描述 输入一个字符串,打印出该字符串的所有排列.例如,输入字符串”abc”,则输出有字符’a’,’b’,’c’所 ...
- 使用iview-project 打包build报错,ERROR in xxxxx.cheunk.js from UglifyJs
一.iview-project 为iview官方推荐工程,一个基于iview的vue脚手架 github网址:https://github.com/iview/iview-project 废话不多说 ...
- Python int操作
a = 1 # 1 print(a.bit_length()) #计算一个数字的二进制长度.没啥用
- 详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程
Himi 原创, 欢迎转载,转载请在明显处注明! 谢谢. 原文地址:http://blog.csdn.net/xiaominghimi/article/details/6937097 //——201 ...