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

一步一步學Silverlight :如何在Silverlight中調用JavaScript

概述

Silverlight 2 Beta 1版本發布了,無論從Runtime還是Tools都給我們帶來了很多的驚喜,如支持框架語言Visual Basic, Visual C#, IronRuby, IronPython,對JSON、Web Service、WCF以及Sockets的支持等一系列新的特性?!兑徊揭徊綄WSilverlight 2系列》文章將從Silverlight 2基礎知識、數據與通信、自定義控件、動畫、圖形圖像等幾個方面帶您快速進入Silverlight 2開發。

Silverlight中內置了對于HTML、客戶端腳本等的支持。很多情況下,我們編寫的Web應用程序中用了一些JavaScript或者AJAX框架,我們希望能夠在Silverlight調用某些腳本方法,或者說在Silverlight中觸發某個腳本的執行,這時就需要用到在Silverlight中調用JavaScript,本文將簡單介紹這一內容。

使用GetProperty獲取腳本對象

先來看一個簡單的例子,在Silverlight測試頁面中放入一個div用作顯示信息:

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

編寫一段簡單的JavaScript代碼:

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

再編寫一個簡單的輸入信息界面:

<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="調 用" FontSize="20" Foreground="Red" Click="submit_Click"></Button>    </StackPanel></StackPanel>

實現對腳本的調用:

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等。然后調用InvokeSelf()方法,傳入參數,這里ScriptObject總共提供了兩個方法,Invoke和InvokeSelf,如果我們只調用腳本對象的自身,就可以使用InvokeSelf,如果腳本對象中還有其它的函數等,可以使用Invoke傳入名稱進行調用,兩個方法的定義如下:

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

運行上面的示例:

 TerryLee_Silverlight2_0097

輸入TerryLee后點擊調用,可以看到確實調用了客戶端腳本:

TerryLee_Silverlight2_0098 

使用CreateInstance創建腳本對象

除了使用上面所說的使用HtmlPage.Window.GetProperty方法獲取腳本對象之外,還有一種替代方法,即使用HtmlPage.Window屬性的CreateInstance方法。還是使用上面的示例,我們在測試頁中加入如下一段腳本,使用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創建腳本對象

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

運行后的效果跟上面的示例是一樣的,如:

TerryLee_Silverlight2_0097

輸入文本信息后:

TerryLee_Silverlight2_0099 

使用HtmlPage.Window.Eval()

最后還有一種機制,就是使用HtmlPage.Window.Eval()方法,只要我們給該方法傳入一段字符串,它都會作為JavaScript來執行。做一個簡單的測試,我們再修改一下上面的示例代碼:

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

運行后我們在文本框中輸入一段腳本alert('TerryLee');,效果如下所示:

TerryLee_Silverlight2_0100

既然HtmlPage.Window.Eval()可以執行一段腳本,并且將執行的結果以對象形式返回,我們可以使用它來獲取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);}

運行后效果如下,獲取的result確實就是我們定義的div。

TerryLee_Silverlight2_0101 

對AJAX框架的支持

前面說過,ScriptObject不僅僅是對JavaScript的封裝,也支持其它的AJAX框架,現在我們用jQuery來測試一下,編寫一小段代碼:

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

調用腳本

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

運行后的結果與前面的示例是一樣的:

TerryLee_Silverlight2_0102 

結束語

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

NET技術一步一步學Silverlight :如何在Silverlight中調用JavaScript,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 影音先锋 av天堂 | 亚洲AV日韩AV欧美在线观看网 | 一手揉着乳头一手模仿抽插视频 | 成人免费视频在 | 皮皮在线精品亚洲 | 一个人免费观看完整视频日本 | 亚洲视频在线观看不卡 | 脔到她哭H粗话HWWW男男动漫 | 国产精品人妻无码免费A片导航 | 97精品少妇偷拍AV | 伦理 电影在线观看百度影音 | 熟妇的味道HD中文字幕 | 成人伊人青草久久综合网 | 男gv纯肉免费视频 | 色欲AV蜜臀AV在线观看麻豆 | 欧美影院在线观看完整版 mp4 | 亚洲色偷偷偷网站色偷一区人人藻 | 97超视频在线观看 | 97视频国产 | 久久久久久天天夜夜天天 | 国产精品久久久久久日本 | 亚洲 色 欧美 爱 视频 日韩 | 父亲猜女儿在线观看 | 亚洲娇小性色xxxx | 欧美激情一区二区三区视频 | 久久精品国产免费播放 | 日韩亚洲国产中文字幕欧美 | 日本无码专区亚洲麻豆 | 亚洲日韩视频免费观看 | 18禁在线无遮挡羞羞漫画 | 麻豆一二三四区乱码 | 9亚洲欧洲免费无码在线 | 国产免费看黄的私人影院 | 最新高清无码专区在线视频 | 国产AV天堂亚洲AV麻豆 | 琪琪午夜福利免费院 | 伊人久久电影网 | 久久婷婷丁香五月色综合啪免费 | 中文字幕中文字幕永久免费 | 99久热精品免费观看 | 久久人妻AV一区二区软件 |