日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Silverlight如何与JS相互调用

發布時間:2025/3/17 javascript 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Silverlight如何与JS相互调用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.sl調用js

比如我們在頁面中定義一個js函數:

<script type="text/javascript">
??????? function?fnTest(msg) {
??????????? alert('fnTest:' + msg);
??????? }
??? </script>

sl中可以有二種調用方式:

HtmlPage.Window.CreateInstance("fnTest", "CreateInstance");

或者

HtmlPage.Window.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" style="text-decoration: none">
??????????????? <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight"
??????????????????? style="border-style: none" />
??????????? </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?οnclick="fnClickTest()">調用SL中的方法</button>

?

說明:SilverlightLoaded會在silverlight控件加載完成時觸發,觸發完了以后,slCtl這個全局變量就保留了對silverlight的引用,其它地方就能繼續調用silverlight中的各種方法和屬性了

總結

以上是生活随笔為你收集整理的Silverlight如何与JS相互调用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。