GVKun编程网logo

Silverlight和浏览器交互介绍-------JavaScript调用托管代码(silverlight 浏览器)

11

如果您对Silverlight和浏览器交互介绍-------JavaScript调用托管代码和silverlight浏览器感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解Silverlight和

如果您对Silverlight和浏览器交互介绍-------JavaScript调用托管代码silverlight 浏览器感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解Silverlight和浏览器交互介绍-------JavaScript调用托管代码的各种细节,并对silverlight 浏览器进行深入的分析,此外还有关于javascript – 浏览器功能检测 – 是否支持Silverlight?、Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式_javascript技巧、jsvascript调用Silverlight方法实现Lync聊天、SilverLight + Html + JavaScript的实用技巧。

本文目录一览:

Silverlight和浏览器交互介绍-------JavaScript调用托管代码(silverlight 浏览器)

Silverlight和浏览器交互介绍-------JavaScript调用托管代码(silverlight 浏览器)

          使用JavaScript调用后台托管代码

使用JavaScript调用托管代码,主要提供两种方式,来实现共Javascript调用的托管代码

a)      使用RegisterScriptableObject和UnregisterScriptableObject来实现注册和取消注册对象,

HtmlPage.RegisterScripableObject(“CallKey”,this); “CallKey”是注册的调用的Key,使用这个key来调用后台的Cal方法。

 

在后台编写一个供JavaScript调用的方法

[ScriptableMember]

Public int Cal(int x,int y)

{

     Int z = x+y;

     Return z;

}

这里有两个需要注意的地方,一个是必须带有ScriptableMember的特性,第二个是方法可访问性必须是Public的,否则JavaScript是调用不到的

 

具体的Javascript调用方法如下:

Function  call()

{

     Var slObj = document.getElementById(‘SLObject’);//SLObject 是<asp:Silverlight>控件的ID

     slObj.content.CallKey.Add(a,b);

}

b)      使用RegisterCreateableType实现对托管代码的注册

HtmlPage.RegisterCreateableType(“CallKey”,typeof(CallClass));

 

[ScriptableType]

Public class CallClass

{

  [ScriptMember]

  Public int Cal(int x,int y)

{

   Int z = x+y;

   Return z;

}

}

 

调用方法是:

Function CallSilverlight()

{

Var slObj = document.getElementById(‘SLObject’);

 Var  testObj = slObj.content.services.createObject(“CallClass”);

testObj.Cal(a,b);

}

javascript – 浏览器功能检测 – 是否支持Silverlight?

javascript – 浏览器功能检测 – 是否支持Silverlight?

我是与设备检测相反的功能检测的热心倡导者.我希望能够检测浏览器(移动设备或其他)是否支持Silverlight.

我有一个很好的谷歌,发现这个Silverlight supported user agent,但看着最后的评论它似乎不是最新的.

还有这个问题Is there a way to test if a browser supports flash/silverlight?但它似乎没有回答这个问题.检测是否安装了Silverlight与检测对Silverlight的支持不同.

有没有人有这方面的经验,是否有可能?

解决方法:

Detecting if Silverlight is installed is different to detecting support for Silverlight.

确实不同. Opera不受“支持”但运行Silverlight就好:)

在Silverlight.js中使用Silverlight.isInstalled检查是否已安装Silverlight(请参阅:http://developer.yahoo.com/dotnet/silverlight/embedding.html).有什么理由不适合你吗?

如果您必须创建哪个浏览器与Silverlight兼容的数据库,那么我建议利用crossbrowsertesting.com

Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式_javascript技巧

Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式_javascript技巧

默认情况下,生成的页面代码可能与下面的代码类似:

复制代码 代码如下:




IRERTranscript














Get Microsoft Silverlight






  我们可以给object对象传递不同的参数,如xap包的加载地址,onLoad或onError事件句柄,背景色,最小版本号支持等等,完整的参数信息读者可以参考Silverlight 3中param参数列表汇总。object对象中一般会包含一段标记,是用来显示当客户端浏览器未安装Silverlight插件时要显示的内容的,我们可以自定义其中的内容,如:
复制代码 代码如下:







Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式_javascript技巧





  当客户端浏览器未安装Silverlight插件时,程序会在相应的区域显示一张带有热区的图片,热区指向的位置是Microsoft提供的Silverlight安装地址。理论上,你可以指定任何的自定义代码来显示nonSilverlight的效果,但是Silverlight默认没有提供低版本Silverlight情况下要显示的效果,也就是lowSilverlight的情况。
Silverlight可以自动实现向前兼容,也就是在低版本下编译的Silverlight包可以在高版本下运行,相反,在高版本下编译的Silverlight包不能再低版本下运行,此时Silverlight插件会显示一张默认的图片用来告知用户升级插件,并弹出一个提示框,如下图:

Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式_javascript技巧

 

Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式_javascript技巧

 

  个人觉得这种用户体验并非很好,试想,如果当前页面上有多个Silverlight插件,岂不是要弹出多个提示框吗?那么如何来解决这个问题呢?事实上,我们除了直接在页面上添加object标记来呈现Silverlight外,还可以通过javascript脚本来动态添加Silverlight。Silverlight.js脚本为我们提供了一系列可用的方法,详细内容大家可以参考下msdn http://msdn.microsoft.com/zh-cn/library/cc838126(v=VS.95).aspx#isinstalled

  以及如何通过脚本在页面上添加Silverlight,http://msdn.microsoft.com/zh-cn/library/cc265155(v=VS.95).aspx

  msdn上给出了非常详细的例子来告诉我们如何使用这些脚本方法,有一点需要注意,使用Silverlight.js文件时一定要与当前Silverlight版本相一致,否则可能会有脚本错误,对应的Silverlight.js文件可以在微软的站点上下载,你会发现其实有很多个可用的版本,其中还包括支持调试的版本哦。

  createObject方法参数在使用的时候有几个问题需要注意下:

  1. 参数按顺序指定,如果有不需要传递的参数可用null代替。

  2. parent element参数必须指定,也就是object标记的父元素,可直接将元素的id当做对象传入,但是在Firefox中不支持,此时可以使用document.getElementById(''elementId'')语句代替该参数即可。

  3. param列表通过数组传递,参数名称与在object标记中使用的名称保持一致即可。

  4. 事件列表如果没有对应的页面脚本则传null值,否则会报脚本错误。

  5. 最后一个参数context如果不需要可以省去,不用传null或空值。

  你应该注意到了,在使用createObject方法时我们可以顺便给Silverlight指定nonSilverlight效果,这个是通过param列表中的altHtml参数来指定的,实施上,我们在页面上直接使用object标记呈现Silverlight时也可以使用alt属性来指定nonSilverlight效果,这个与在object标记中直接插入html代码的效果相同。
通过使用createObject方法,我们完全可以自定义lowSilverlight效果了,下面是一个例子:

复制代码 代码如下:






  使用Silverlight.isInstalled()方法可以判断客户端浏览器是否已经安装了指定版本的Silverlight插件,如果已经安装了,则使用Silverlight.createObject方法创建Silverlight对象,否则输出自定义的内容。

这里还有一篇文章个人觉得很有用,给大家分享下吧!

http://www.itstrike.cn/Question/Use-JavaScript-to-create-Silverlight-Object-createObject

jsvascript调用Silverlight方法实现Lync聊天

jsvascript调用Silverlight方法实现Lync聊天

Microsoft Lync 是一客户端程序,要想通过web方式调用其API 很难,当做过了,其实它一点也不难,要么写Com组件要么利用Silverlight来实现,对于.NET程序猿来说写Com组件也许并不是那么习惯,那么我们何不用Silverlight来实现呢,如今Silverlight已经5.0了它已经很成熟很强大了,但它的一弱点,不能引用非Silverlight的组件,意思就是说,你要用到你自己的类库的时候,那么它会不让你引用,但问题都会有解决办法的,你可以用Silverlight调用WCF或者webservice都可以实现通信,今天主要不是讲Silverlight与WCF等各种服务通信,回到正题,其实微软的Lync API提供了一个Com组件比如Name.NameCtrl.1 但这个东西只能获取到lync用户的状态(在线、离线、忙碌....) 所以要通过它来发起与Lync其它用户的聊天对话,是不行的,所以我这里选择用Silverlight来实现,那么javascript 又如何去调得到Silverlight的方法呢,很简单通过代码,一看就能明白,首先Silverlight应用程序必须提供一个方法标识为可调用,要为Silverlight方法头上加上这个特性,[ScriptableMember],这样就声明了我这个方法是供脚本对象来调用的,

        [ScriptableMember]
        public void BeginConversation(string sipUri)
        {

            Lyncclient client = Lyncclient.GetClient();
            Contact contact = client.ContactManager.GetContactByUri(sipUri);
            ContactAvailability availability = (ContactAvailability)contact.GetContactinformation(ContactinformationType.Availability);
            Conversation conversation = client.ConversationManager.AddConversation();
            conversation.AddParticipant(contact);
            InstantMessageModality m = (InstantMessageModality)conversation.Modalities[ModalityTypes.InstantMessage];
            m.BeginConnect(null,null);

        } 

好了Silverlight的方法已经写好,接下来,你得注册,不然js还是调不到,

打开Silverlight的App.App.xaml.cs文件,这货就相当于CS程序的Program类,web程序的Global.asax,就是表示Silverlight的入口,打开这个类在它的如下方法中进行注册

private void Application_Startup(object sender,StartupEventArgs e)
{
    SendLync send = new SendLync();//表示你的BeginConversation方法所在的xaml后台类
    sender.RootVisual = send;
    HtmlPage.RegisterScriptableObject("BeginConversation",send);//注册之前我们写好的方法

}

 

到些为止Silverlight端已完成了;

JS调用:

在你的承载Silverlight的页面的object标签里要按如下方式写

<!-- 

<div id="silverlightControlHost"     >
               <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
       <param name="source" value="../ClientBin/XingSoft.ShiMaoGroup.HabSilverlight.xap"/>
       <param name="onError" value="onSilverlightError" />
       <param name="background" value="white" />
       <param name="minRuntimeVersion" value="5.0.61118.0" />
       <param name="autoUpgrade" value="true" />
                     <param name="onload" value="onSilverlightLoad"/>
       <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></div>
              -->

//看见红色部分了吗它指向的是下面这个js函数

var slProxy = null;

function onSilverlightLoad(sender) {
        slProxy = sender.getHost();//获取调用Silverlight代理类
    }

//接下来调用就很简单了

function invoke(sipUri) {
        slProxy.Content.BeginConversation.BeginConversation(sipUri);//红色为你注册时候的名字绿色为你的Silverlight类里写的方法名
    }

就这样大功告成!!

SilverLight + Html + JavaScript

SilverLight + Html + JavaScript

  dfdfd

关于Silverlight和浏览器交互介绍-------JavaScript调用托管代码silverlight 浏览器的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于javascript – 浏览器功能检测 – 是否支持Silverlight?、Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式_javascript技巧、jsvascript调用Silverlight方法实现Lync聊天、SilverLight + Html + JavaScript的相关信息,请在本站寻找。

本文标签:

上一篇Silverlight 5 Beta新特性[6]低延迟对WAV格式声音效果支持(低延迟模式原理)

下一篇Silverlight和浏览器交互介绍----Silverlight中使用托管代码调用JavaScript(silverlight 浏览器)