对于silverlight与javascript的交互感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍jsclientheight,并为您提供关于JavaScript/CSS与Silverlig
对于silverlight与javascript的交互感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍js clientheight,并为您提供关于JavaScript/CSS与Silverlight vs. Flex、Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式_javascript技巧、SilverLight + Html + JavaScript、Silverlight 2学习教程(五):JavaScript与Silverlight托管代码相互调用的有用信息。
本文目录一览:- silverlight与javascript的交互(js clientheight)
- JavaScript/CSS与Silverlight vs. Flex
- Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式_javascript技巧
- SilverLight + Html + JavaScript
- Silverlight 2学习教程(五):JavaScript与Silverlight托管代码相互调用
silverlight与javascript的交互(js clientheight)
在silverlight的开发中,可以做到silverlight中写到的方法与javascript中定义的方法交互使用,而且silverligt本身方法的执行效率就较高,后台与前端的交互显得更加容易,如何交互,请看下面的具体实现,涉及test1.xaml和test1.html,这两者都是在创建silverlight应用程序时自动生成的:
一、javascrpt中调用silverlight后台方法
调用的关键在于如何让后台方法(silverlight中定义的方法)暴露给客户端,便于javascript调用,暴露之后,客户端访问silverlight对象,进而找到暴露的后台方法
1、构建浏览器桥
- 引用 using System.Windows.browser,主要用到HtmlPage对象,代表当前页面。
- 在test1.xaml的load事件里将silverlight注册成宿主Html页上的一个可进行脚本处理的对象
void MainPage_Loaded(object sender,RoutedEventArgs e) { HtmlPage.RegisterScriptableObject("myscript",this); }
- 将已写好的silverlight方法向外部调用者公开,只需添加[ScriptableMember]属性即可
[ScriptableMember] public void UpdateCities(string country) { List<CityData> cities = GetCities(country); itemsCon.ItemsSource = cities; }
2、Html中调用silverlight对象中写的方法
- 在test.html中我们很容易找到<object>标记,这个标记即为silverlight对象,其中包括source、background、onError等参数,将该对象标以id="silverlightobj",这样javascript中就可以根据ID访问该对象
<object id="silverlightobj" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%"> <param name="source" value="ClientBin/SbSCh9_1.xap"/> <param name="onError" value="onSilverlightError" /> <param name="background" value="white" /> <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"https://www.jb51.cc/tag/decoration/" target="_blank">decoration:none"> <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="获取 Microsoft Silverlight"/> </a> </object>注:type属性指定要加载的对象的MIME类型,对于silverlight应用程序,要使用的是application/x-silverlight-2这个MIME类型
- 调用后台方法
<script type="text/javascript"> function updatecity(country) { var slplugin = document.getElementById("silverlightobj"); slplugin.content.myscript.UpdateCities(country); } </script>这样就完成了Html中调用silverlight方法
二、silverlight方法中调用客户端的javascript方法
关键点在HtmlPage.Window.GetProperty("MoveMap") as ScriptObject,获取页面上的script对象
这种调用比较简单,附上代码:
ScriptObject movemap = HtmlPage.Window.GetProperty("MoveMap") as ScriptObject; movemap.InvokeSelf(strcity);其中html页面上的script:
<script type="text/javascript"> var map = null; function GetMap() { map = new VEMap('mapdiv'); map.LoadMap(); } function MoveMap(where) { try { map.Find(null,where); } catch (e) { alert(e.Message); } } </script>注:GetProperty参数为script方法名
总结:在silverlight中可以用html按钮直接调用C#方法,笔者试了下在asp.net测试类似调用,最终失败,在asp.net上最好还是直接用服务器控件与后台方法直接通信
JavaScript/CSS与Silverlight vs. Flex
因此,我们有一些持续的讨论是否应该在Flex或Silverlight中重新编写应用程序的客户端部分,或者使用jQuery等一些最先进的JavaScript框架重新编写,或者我们是否应该继续使用我们的内容已经并逐渐尝试替换现有代码的最差位.更难以决定的是,重新编写UI可能会花费我们6-12个月的时间.
我想听听你对这个问题的看法(也许你们中的一些人已经不得不做出类似的决定).
编辑:回答答案提出的一些问题:后端代码是用C#编写的,目标受众(通常)是我们出售软件的公司的非技术用户(不是一般公众,但并非严格的内部用户),软件“只”必须在桌面浏览器中运行,但不一定在移动设备上运行,客户端应用程序是一个完整的用户界面.
解决方法
通过将其保留在JavaScript中,您可以慢慢地引入一个框架,如果您选择并迭代地执行(替换代码部分,测试它,释放它,并修复任何错误).这将允许您以较慢的速度执行此操作并获得反馈.也就是说,如果项目在中途被取消,那么你并没有完成所有的工作,因为最终用户正在使用更新的代码.记住瀑布模型,这基本上是完全交换的几乎永远不会起作用.
尽管我不愿承认这一点,因为对于开发人员来说,它总是最有趣的,转移平台,并且一次取代整个系统很少有效.有无数的例子,netscape一个. Here is the post from Spolsky on it.(我还推荐这本书Dreaming in Code.这是一个失败的软件项目以及如何和为什么的一个很好的例子).记住要从头开始重写一个系统,你基本上必须经历每一行代码并弄清楚它的作用和原因.起初你认为你可以跳过它,但最终归结为此.就像你说的那样,你的代码已经过时了,这意味着它很可能会完成任务.其中一些你可以忽略,其他人会,“我不知道系统需要它做到这一点.”
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式_javascript技巧
默认情况下,生成的页面代码可能与下面的代码类似:
我们可以给object对象传递不同的参数,如xap包的加载地址,onLoad或onError事件句柄,背景色,最小版本号支持等等,完整的参数信息读者可以参考Silverlight 3中param参数列表汇总。object对象中一般会包含一段标记,是用来显示当客户端浏览器未安装Silverlight插件时要显示的内容的,我们可以自定义其中的内容,如: