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" οnclick="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就不行了,如果将两者结合起来不就可以解决了吗,当时是提出这样的技术方案,不知这位同学测实践过没有,现在写这篇博文主要是记录一下解决的方案,以及技术的总结。

silverlight 中javascript 代码与托管代码的互调用 以及一些思考相关推荐

  1. Cordova插件中JavaScript代码与Java的交互细节介绍

    在Cordova官网中有这么一张架构图:大家看右下角蓝色的矩形框"Custom Plugin"--自定义插件.意思就是如果您用Cordova打包Mobile应用时,发现您的移动应用 ...

  2. 网页中Javascript代码的应用方式

    Javascript加入网页有两种方法: 1.直接加入HTML文档 这是最常用的方法,大部分含有Javascript的网页都采用这种方法,如: <script language="Ja ...

  3. Cordova应用的JavaScript代码和自定义插件代码的调试

    我之前写过三篇Cordova相关的技术文章.当我们使用Cordova将自己开发的前端应用打包安装到手机上后,可能会遇到需要调试Cordova应用的时候. 本文就介绍Cordova应用的调试步骤. 如果 ...

  4. 一步一步学Silverlight 2系列(22):在Silverlight中如何用JavaScript调用.NET代码_转载...

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  5. 一步一步学Silverlight 2系列(22):在Silverlight中如何用JavaScript调用.NET代码

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  6. 一步一步学Silverlight 2系列(21):如何在Silverlight中调用JavaScript

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  7. js如何运行python代码_python中执行javascript代码

    python中执行javascript代码: 1.安装相应的库,我使用的是PyV8 2.import PyV8 ctxt = PyV8.JSContext() ctxt.enter() func = ...

  8. 如何在html中写javascript代码,如何在本地html代码中使用javascript脚本

    我在jsfiddle中的代码正在工作,但是当我尝试在本地使用它时没有. 我不知道如何解决它,因为我认为代码是正确的. 我也尝试下载Jquery文件,并将其链接到代码中,但它不起作用.我确信这是一个愚蠢 ...

  9. 移动网站开发中常用的10段JavaScript代码

    在开发移动网站过程中,有一些Javascript代码会经常用到.以下是10段常用的JavaScript代码.需要注意的是某几段代码需要jQuery mobile framework支持. 1.如果网页 ...

最新文章

  1. [问题解决]不使用PWM调速系统,彻底解决一个L298N带动两个电机却转速不同的问题
  2. plupload怎么设置属性_腾达无线路由器怎么设置,这些是你要知道的
  3. jQueryEasyUI Messager基本使用
  4. linux共享内存变量 tiaojianbianliang,低压集抄系统中Linux共享内存使用分析
  5. 11.8 自动化测试脚本编写规范(1)
  6. android空格对齐
  7. 14. Longest Common Prefix【leetcode】
  8. 华为的人才体系:任正非这样管理19万员工
  9. 归并算法(Java实现)
  10. Jekins配置Publish over SSH详解
  11. Your application has presented a UIAlertController (UIAlertController: 0x100b79
  12. 一文带你全方位了解与投递EI
  13. 影视剧中十大经典反派台词!(来自大洋论坛)
  14. RxSwift之深入解析Using操作的应用和原理
  15. 小白的模拟电路初步学习20日打卡(18)
  16. [c语言]倒置字符串 -牛客网
  17. Prometheus 之 Alertmanager告警抑制与静默
  18. 有这5款开源软件,语音转文字很简单!
  19. Docker是什么(Docker-CE)
  20. 三、SALV 添加自定义的状态栏

热门文章

  1. [hdu6434]Problem I. Count
  2. 儿智展---国内首个少儿智能产品专业展11月登陆上海
  3. kubernetes集群网络配置方案——flannel部署
  4. 关于Messenger实现进程间通信
  5. Intent以及IntentFilter详解
  6. Linux中读写权限
  7. LVS +DR +keepalived高可用性web集群
  8. const,readonly 这些你真的懂吗? 也许会被面试到哦。。。
  9. 80个Python经典资料(教程+源码+工具)汇总——下载目录
  10. 多ajax请求的各类解决方案(同步, 队列, cancel请求)