此处将为大家介绍关于Silverlight和javascript之间的调用的详细内容,并且为您解答有关silverlightorhtml5support的相关问题,此外,我们还将为您介绍关于.net–
此处将为大家介绍关于Silverlight 和javascript 之间的调用的详细内容,并且为您解答有关silverlight or html5 support的相关问题,此外,我们还将为您介绍关于.net – 使用javascript激活silverlight事件、c# – 我可以使用silverlight替换javascript和JQuery吗?、JavaScript/CSS与Silverlight vs. Flex、Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式_javascript技巧的有用信息。
本文目录一览:- Silverlight 和javascript 之间的调用(silverlight or html5 support)
- .net – 使用javascript激活silverlight事件
- c# – 我可以使用silverlight替换javascript和JQuery吗?
- JavaScript/CSS与Silverlight vs. Flex
- Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式_javascript技巧
Silverlight 和javascript 之间的调用(silverlight or html5 support)
1.sl调用js
比如我们在页面中定义一个js函数:
<script type="text/javascript">
function fnTest(msg) {
alert('fnTest:' + msg);
}
</script>
sl中可以有二种调用方式:
HtmlPage.Window.CreateInstance("fnTest","CreateInstance");
或者
Invoke("fnTest","Invoke");
运行的效果完全相同,但是建议用Invoke方法,原因是:
CreateInstance是HtmlWindow中定义的方法,而HtmlWindow继承自HtmlObject,再向上找HtmlObject又继承ScriptObject,最终调用的还是ScriptObject中的Invoke方法,所以用CreateInstance绕来绕去,最终还是绕到了Invoke上,还不如一步到位直接Invoke更高效。
2.sl修改dom元素属性
比如页面中有一个文本框: <input type="text" id="txtTarget" name="txtTarget" />
sl中同样也有二种方法调用:
HtmlPage.Document.GetElementById("txtTarget").SetAttribute("value","Silverlight");
HtmlPage.Document.GetElementById("txtTarget").SetProperty("value","Silverlight");
功能完全相同,同样建议用SetProperty方法,理由同上
3.sl为dom元素附加事件
HtmlPage.Document.GetElementById("txtTarget").AttachEvent("focus",new EventHandler(AttachJsMethod));
private void AttachJsMethod(object o,EventArgs e)
{
HtmlPage.Window.Invoke("fnTest","silverlight");
}
以上代码将为txtGarget文本框附加onfocus事件处理函数:fnTest
4.js调用sl中的方法,属性
sl部分的关键处理是:要在暴露出来的方法/属性前加上[ScriptableMember()],参考下面的代码:
[ScriptableMember()]
public string Hello(string Msg)
{
return "Hello," + Msg;
}
[ScriptableMember()]
public void Test(string msg)
{
MessageBox.Show("From Silverlight:" + msg);
}
private string _myName = "";
[ScriptableMember()]
public string MyName { set { _myName = value; } get { return _myName.Length == 0 ? "MyName Test" : _myName; } }
这里定义二个方法(一个有返回值,一个没返回值),外加一个属性
然后要在App.Xaml.cs中注册类型,参考下面这样:
private void Application_Startup(object sender,StartupEventArgs e)
{
MainPage mp = new MainPage();
this.RootVisual = mp;
HtmlPage.RegisterScriptableObject("myMainPage",mp);
}
js中这可以使用了,不过得先给silverlight的object标签加一个参数,参考下面这样:
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2"
width="100%" height="100%">
<param name="source" value="ClientBin/JavaScriptInvoke.xap" />
<param name="onError" value="onSilverlightError" />
<param name="background" value="white" />
<param name="minRuntimeVersion" value="3.0.40818.0" />
<param name="onLoad" value="SilverlightLoaded" />
<param name="autoUpgrade" value="true" />
<a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40818.0"https://www.jb51.cc/tag/decoration/" target="_blank">decoration: none">
<img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight"
/>
</a>
</object>
然后定义对应的函数:
<script type="text/javascript">
var slCtl = null;
function SilverlightLoaded(sender) {
slCtl = sender.getHost();
alert(slCtl.Content.myMainPage.Hello("JavaScript"));
}
var fnClickTest = function() {
if (slCtl != null) {
slCtl.Content.myMainPage.Test("Hi")
alert(slCtl.Content.myMainPage.MyName);
}
}
</script>
为了测试fnClickTest,可以在页面中加一个button,类似这样:
<button onclick="fnClicktest()">调用SL中的方法</button>
说明:SilverlightLoaded会在silverlight控件加载完成时触发,触发完了以后,slCtl这个全局变量就保留了对silverlight的引用,其它地方就能继续调用silverlight中的各种方法和属性了
本文来自笨小孩做开发博客,原文地址:http://www.cnblogs.com/dullbaby/archive/2013/02/01/2889313.html
.net – 使用javascript激活silverlight事件
我可以在页面中使用javascript来触发silverlight组件中的事件吗?如果是这样,有没有人有一些代码示例?
解决方法:
是的你可以.您需要使用“ScriptableMember”属性在.NET代码中的类上装饰方法,然后在对象上调用HtmlPage.RegisterScriptableObject以标记它与javascript的互操作性.您将创建一个名为OnMyEvent(sender As Object,e As MyEventArgs)的.NET方法,然后引发您想要的对象事件.然后你的javascript会调用它.
有关演练,请参阅此链接:
http://msdn.microsoft.com/en-us/library/cc221414(VS.95).aspx
c# – 我可以使用silverlight替换javascript和JQuery吗?
我有一个大量使用JQuery的web应用程序.如果可能的话,我想开始使用silverlight.而不是使用jquery ajax功能和其他jquery功能,我想使用silverlight.这可能与silverlight有关吗?
解决方法:
不同的工具. jQuery最适合操作DOM. Silverlight(表面上)最适合富Internet应用程序,而不是操纵DOM.如果您的Web应用程序尝试使用JavaScript创建一个很酷的UI,那么Silverlight可能非常适合替换大量的JavaScript代码.
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插件时要显示的内容的,我们可以自定义其中的内容,如: