天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

一步一步學(xué)Silverlight :如何在Silverlight中調(diào)用JavaScript

概述

Silverlight 2 Beta 1版本發(fā)布了,無(wú)論從Runtime還是Tools都給我們帶來(lái)了很多的驚喜,如支持框架語(yǔ)言Visual Basic, Visual C#, IronRuby, IronPython,對(duì)JSON、Web Service、WCF以及Sockets的支持等一系列新的特性。《一步一步學(xué)Silverlight 2系列》文章將從Silverlight 2基礎(chǔ)知識(shí)、數(shù)據(jù)與通信、自定義控件、動(dòng)畫(huà)、圖形圖像等幾個(gè)方面帶您快速進(jìn)入Silverlight 2開(kāi)發(fā)。

Silverlight中內(nèi)置了對(duì)于HTML、客戶端腳本等的支持。很多情況下,我們編寫(xiě)的Web應(yīng)用程序中用了一些JavaScript或者AJAX框架,我們希望能夠在Silverlight調(diào)用某些腳本方法,或者說(shuō)在Silverlight中觸發(fā)某個(gè)腳本的執(zhí)行,這時(shí)就需要用到在Silverlight中調(diào)用JavaScript,本文將簡(jiǎn)單介紹這一內(nèi)容。

使用GetProperty獲取腳本對(duì)象

先來(lái)看一個(gè)簡(jiǎn)單的例子,在Silverlight測(cè)試頁(yè)面中放入一個(gè)div用作顯示信息:

<div id="result"></div>

編寫(xiě)一段簡(jiǎn)單的JavaScript代碼:

<script type="text/Javascript">    function Hello(message)    {        var resultSpan = $get("result");        resultSpan.innerText = "Hello " + message;    }</script>

再編寫(xiě)一個(gè)簡(jiǎn)單的輸入信息界面:

<StackPanel Background="#CDFCAE" Orientation="Vertical">    <StackPanel Height="40">        <TextBlock Text="Calling Browser Script from Silverlight"                   Foreground="Red"></TextBlock>    </StackPanel>    <StackPanel Orientation="Horizontal">        <TextBox x:Name="input" Width="340" Height="40" Margin="20 0 20 0"></TextBox>        <Button x:Name="submit" Width="120" Height="40" Background="Red"            Content="調(diào) 用" FontSize="20" Foreground="Red" Click="submit_Click"></Button>    </StackPanel></StackPanel>

實(shí)現(xiàn)對(duì)腳本的調(diào)用:

private void submit_Click(object sender, RoutedEventArgs e){    ScriptObject hello = HtmlPage.Window.GetProperty("Hello") as ScriptObject;    hello.InvokeSelf(this.input.Text);}

ScriptObject提供了任何客戶端腳本的封裝,不僅僅是JavaScript,使用其他的AJAX框架也可以,如jQuery等。然后調(diào)用InvokeSelf()方法,傳入?yún)?shù),這里ScriptObject總共提供了兩個(gè)方法,Invoke和InvokeSelf,如果我們只調(diào)用腳本對(duì)象的自身,就可以使用InvokeSelf,如果腳本對(duì)象中還有其它的函數(shù)等,可以使用Invoke傳入名稱進(jìn)行調(diào)用,兩個(gè)方法的定義如下:

[SecuritySafeCritical]public virtual object Invoke(string name, params object[] args);[SecuritySafeCritical]public virtual object InvokeSelf(params object[] args);

運(yùn)行上面的示例:

 TerryLee_Silverlight2_0097

輸入TerryLee后點(diǎn)擊調(diào)用,可以看到確實(shí)調(diào)用了客戶端腳本:

TerryLee_Silverlight2_0098 

使用CreateInstance創(chuàng)建腳本對(duì)象

除了使用上面所說(shuō)的使用HtmlPage.Window.GetProperty方法獲取腳本對(duì)象之外,還有一種替代方法,即使用HtmlPage.Window屬性的CreateInstance方法。還是使用上面的示例,我們?cè)跍y(cè)試頁(yè)中加入如下一段腳本,使用prototype為myHello添加了顯示的功能:

<script type="text/Javascript">    myHello = function(message)    {        this.Message = message;    }    myHello.prototype.Display = function()    {        var resultSpan = $get("result");        resultSpan.innerText = "Hello " + this.Message;    }</script>

使用HtmlPage.Window.CreateInstance創(chuàng)建腳本對(duì)象

private void submit_Click(object sender, RoutedEventArgs e){    ScriptObject script = HtmlPage.Window.CreateInstance("myHello",this.input.Text);    object result = script.Invoke("Display");}

運(yùn)行后的效果跟上面的示例是一樣的,如:

TerryLee_Silverlight2_0097

輸入文本信息后:

TerryLee_Silverlight2_0099 

使用HtmlPage.Window.Eval()

最后還有一種機(jī)制,就是使用HtmlPage.Window.Eval()方法,只要我們給該方法傳入一段字符串,它都會(huì)作為JavaScript來(lái)執(zhí)行。做一個(gè)簡(jiǎn)單的測(cè)試,我們?cè)傩薷囊幌律厦娴氖纠a:

private void submit_Click(object sender, RoutedEventArgs e){    HtmlPage.Window.Eval(this.input.Text);}

運(yùn)行后我們?cè)谖谋究蛑休斎胍欢文_本alert('TerryLee');,效果如下所示:

TerryLee_Silverlight2_0100

既然HtmlPage.Window.Eval()可以執(zhí)行一段腳本,并且將執(zhí)行的結(jié)果以對(duì)象形式返回,我們可以使用它來(lái)獲取DOM元素。如下面這段代碼:

private void submit_Click(object sender, RoutedEventArgs e){    HtmlElement result = HtmlPage.Window.Eval("document.getElementById('result')") as HtmlElement;    string message = result.GetAttribute("innerHTML");    HtmlPage.Window.Alert(message);}

運(yùn)行后效果如下,獲取的result確實(shí)就是我們定義的div。

TerryLee_Silverlight2_0101 

對(duì)AJAX框架的支持

前面說(shuō)過(guò),ScriptObject不僅僅是對(duì)JavaScript的封裝,也支持其它的AJAX框架,現(xiàn)在我們用jQuery來(lái)測(cè)試一下,編寫(xiě)一小段代碼:

<script type="text/Javascript">    function myHello(message)    {        $("#result").text("Hello " + message);    }</script>

調(diào)用腳本

private void submit_Click(object sender, RoutedEventArgs e){    ScriptObject script = HtmlPage.Window.GetProperty("myHello") as ScriptObject;    script.InvokeSelf(this.input.Text);}

運(yùn)行后的結(jié)果與前面的示例是一樣的:

TerryLee_Silverlight2_0102 

結(jié)束語(yǔ)

本文介紹了在Silverlight中調(diào)用JavaScript的幾種方法,下一篇我將介紹如何在JavaScript中調(diào)用Silverlight。

NET技術(shù)一步一步學(xué)Silverlight :如何在Silverlight中調(diào)用JavaScript,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 亚洲中文在线偷拍 | 日本三区四区免费高清不卡 | 国产超碰人人爱被IOS解锁 | YY8090福利午夜理论片 | 伊人久久综在合线影院 | 高清毛片一区二区三区 | 九九热最新视频 | 国产成人亚洲综合无 | 亚洲欧美中文字幕高清在线 | 男神插曲女生软件完整版 | 麻豆国产原创中文AV网站 | 日本无码免费久久久精品 | 影音先锋av333资源网 | 真实的强视频免费网站 | 黄色片网站下载 | 丰满的女友1在线观看 | 欧美牲交视频免费观看K8经典 | 国产精品久久大陆 | 国产品无码一区二区三区在线 | 欧美日韩黄色 | 久久中文电影 | 美女扒开屁股让男人桶 | 无遮掩H黄纯肉动漫在线观看星 | 超碰在线视频 免费 | 91精品在线国产 | 爽爽影院线观看免费 | adc影院在线 | 超级乱淫片午夜电影网99 | 高H黄暴NP辣H一女多男 | 国产精品九九九久久九九 | 欧美肥婆性生活 | 国产在线高清视频无码 | 花蝴蝶在线高清视频观看免费播放 | 成人国产免费 | 熟女人妻水多爽中文字幕 | 伊人青青青| 国产精品美女久久久久AV超清 | 老司机福利在 线影院 | 乌克兰10一12x video | 涩涩视频www在线观看入口 | 国产人妻麻豆蜜桃色精 |