欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

子窗口、父窗口和Silverlight之間的相互調(diào)用

 更新時(shí)間:2010年08月16日 23:35:14   作者:  
前兩天做 silverlight 的東西,主頁(yè)面打開一個(gè)子頁(yè)面,然后子頁(yè)面中包含一個(gè) silverlight 應(yīng)用程序那難免會(huì)涉及到他們?nèi)呦嗷フ{(diào)用的問題
其實(shí),他們之間的調(diào)用還是很簡(jiǎn)單的~
基礎(chǔ)篇
一、父頁(yè)面調(diào)用子頁(yè)面中的JS
我們先創(chuàng)建一個(gè)子窗體
復(fù)制代碼 代碼如下:

var win
$(function () {
Root = $('#Root').val();//設(shè)置根目錄
});
function OpenPlayer(id, type, add) {
//這里是用來(lái)限制同一個(gè)窗口只能彈出一次的
//其實(shí)就算不做限制,只要window.open參數(shù)中的name相同,就不會(huì)重復(fù)打開
//window.open中的參數(shù)可以參考別的文章,有很多
if (win == null || win.closed) {
win = window.open('http://loaclhost/sl.aspx', 'win', 'width=870,height=650,top=1,left=0,scrollbars=0,resizable=0,status=1', true);
}

那怎么調(diào)用呢?
復(fù)制代碼 代碼如下:

this.alert('hello world!');
win.alert('hello world!');
win.onload = function () { this.alert('test'); };

眾所周知,第一行是在本窗口彈出一個(gè)提示框(this可以一般都會(huì)省略~)
那其實(shí),this和win指向的是同類型,不同的對(duì)象罷了
所以,他們的方法都是一樣的。
第二行就是在子窗口中彈出一個(gè)提示框的代碼。
你還可以在父窗體中寫子窗體的事件~
第三行的作用是,當(dāng)子窗體加載完成后,父窗口彈出提示框。
二、子窗體調(diào)用父窗體
這個(gè)和上面差不多,當(dāng)父窗體打開一個(gè)子窗體后,你可以這樣訪問到父窗體
window.opener
這個(gè)對(duì)象就是父窗體,直接調(diào)用相應(yīng)的函數(shù)即可
三、子窗體調(diào)用silverlight函數(shù)或?qū)ο?
這個(gè)在MSND上有詳細(xì)介紹,中文的~在這里,我?guī)痛蠹姨嵋幌轮饕膸讉€(gè)步驟(調(diào)用silverlight對(duì)象的方法就不貼出來(lái)了,里面有)
另附 傳送門:
1、現(xiàn)在silverlight中,給需要被調(diào)用的函數(shù)加上一個(gè)attribute——ScriptableMember
復(fù)制代碼 代碼如下:

// MyScriptableManagedType.cs
using System.Windows.Browser;
namespace HB {
public class MyScriptableManagedType {
[ScriptableMember()]
public string MyToUpper(string str) {
return str.ToUpper();
}
[ScriptableMember()]
public string Name { get; set; }
}
}

2、在構(gòu)造函數(shù)中注冊(cè)這個(gè)對(duì)象
復(fù)制代碼 代碼如下:

MyScriptableManagedType smt = new MyScriptableManagedType();
HtmlPage.RegisterScriptableObject("mySLapp", smt);
//如果這個(gè)函數(shù)不是外部類中的函數(shù),而是sl主體的函數(shù),那直接傳入this指針就可以了

3、打開slverlight所在的頁(yè)面
在 Silverlight 對(duì)象標(biāo)記中,添加具有值"pluginLoaded"的 onLoad 屬性。
下面的示例演示用于 Silverlight 控件引用的 HTML 標(biāo)記。
復(fù)制代碼 代碼如下:

<object data="data:application/x-silverlight-2,"
type="application/x-silverlight-2" width="100%" height="100%">
<param name="source" value="ClientBin/HB.xap"/>
<param name="onerror" value="onSilverlightError" />
<param name="onLoad" value="pluginLoaded" />
<!-- ... -->
</object>

4、在頁(yè)上現(xiàn)有的 script 元素中,添加 pluginLoaded 方法的 JavaScript 函數(shù)。
使用 getHost 方法獲取對(duì) Silverlight 控件的引用。下面的示例演示 pluginLoaded 方法的 JavaScript 代碼。
復(fù)制代碼 代碼如下:

<script type="text/javascript">
var slCtl=null;
function pluginLoaded(sender,args){ // HTML version
slCtl = sender.getHost();
alert( slCtl.Content.mySLapp.MyToUpper("test string"));
}
</script>

四、silverlight調(diào)用子窗體中的js
同樣,也是MSDN上的文章~ 傳送門:
這個(gè)超級(jí)簡(jiǎn)單,直接:
HtmlPage.Window.Invoke("MethodName", args);
前面一個(gè)參數(shù)是函數(shù)名,后面的參數(shù)是這個(gè)函數(shù)需要傳入的參數(shù)
提高篇
五、父頁(yè)面打開子頁(yè)面的時(shí)候,直接給silverlight傳入?yún)?shù)
這個(gè)主要是在初始化的時(shí)候用到
在第一部部分中,我們打開了 http://loaclhost/sl.aspx 這個(gè)子窗口
這時(shí)候,我們可以用GET方式傳入一些參數(shù) 例如:http://loaclhost/sl.aspx?id=1
然后在silverlight中這樣訪問:

string id = HtmlPage.Document.QueryString["id"];

六、怎么樣才能把子窗口前置?
我的子頁(yè)面中的silverlight應(yīng)用程序其實(shí)是一個(gè)音樂播放器,然后,所以子頁(yè)面一般是最小化的。
但是,當(dāng)我在silverlight應(yīng)用程序里彈出MessageBox的時(shí)候它還是處于最小化狀態(tài)… 這樣對(duì)用戶很不友好。
想要把子窗口前置的話,只能通過(guò)在父窗口中調(diào)用 win.focus() 函數(shù)
但是,我們只要稍微處理一下,在父窗口,子窗口,sl中就都可以實(shí)現(xiàn)這個(gè)目的了
所以可以這樣做:
1、在父窗口中寫一個(gè)函數(shù),叫Focus()
然后調(diào)用 win.focus();
2、在子窗口中寫一個(gè)函數(shù),叫Focus()
調(diào)用 window.opener.Focus()
3、最后,如果想讓silverlight應(yīng)用程序前置,你在父窗口或者子窗口中調(diào)用Focus()這個(gè)函數(shù),也可以再silverlight中調(diào)用子窗口的Focus()函數(shù)

七、怎么判斷silverlight已經(jīng)加載完成?
下面有幾個(gè)思路,有對(duì)有錯(cuò)
(√)在silverlight應(yīng)用程序的構(gòu)造函數(shù)中,調(diào)用子頁(yè)面或者父頁(yè)面(通過(guò)子頁(yè)面)的js 【這個(gè)方法可行,但是略顯麻煩】
(×)在子頁(yè)面中 寫 window.onload 事件 【這個(gè)事件觸發(fā)的時(shí)候silverlight不一定加載完成】
(√)還記得第三部分,第3步里的這個(gè)嗎? <param name="onLoad" value="pluginLoaded" /> 【推薦做法】
加入這條以后,silverlight加載完成后就出觸發(fā)子頁(yè)面的這個(gè)函數(shù) 函數(shù)名可以更改

相關(guān)文章

  • js實(shí)現(xiàn)下拉框選擇要顯示圖片的方法

    js實(shí)現(xiàn)下拉框選擇要顯示圖片的方法

    這篇文章主要介紹了js實(shí)現(xiàn)下拉框選擇要顯示圖片的方法,涉及針對(duì)js操作select的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-02-02
  • 微信小程序?qū)D片進(jìn)行canvas壓縮的方法示例詳解

    微信小程序?qū)D片進(jìn)行canvas壓縮的方法示例詳解

    這篇文章主要給大家介紹了關(guān)于微信小程序?qū)D片進(jìn)行canvas壓縮的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 微信小程序開發(fā)(二)圖片上傳+服務(wù)端接收詳解

    微信小程序開發(fā)(二)圖片上傳+服務(wù)端接收詳解

    本篇文章主要介紹了微信小程序開發(fā)(二)圖片上傳+服務(wù)端接收,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-01-01
  • JS指定音頻audio在某個(gè)時(shí)間點(diǎn)進(jìn)行播放

    JS指定音頻audio在某個(gè)時(shí)間點(diǎn)進(jìn)行播放

    這篇文章主要介紹了JS指定音頻audio在某個(gè)時(shí)間點(diǎn)進(jìn)行播放,獲取當(dāng)前音頻audio的長(zhǎng)度,音頻時(shí)長(zhǎng)格式轉(zhuǎn)化,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • html2canvas圖片跨域問題圖文詳解

    html2canvas圖片跨域問題圖文詳解

    我們?cè)谶M(jìn)行圖片保存的時(shí)候經(jīng)常會(huì)發(fā)現(xiàn)圖片跨域了,下面下面這篇文章主要給大家介紹了關(guān)于html2canvas圖片跨域問題的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • 微信小程序?qū)崿F(xiàn)拼圖小游戲

    微信小程序?qū)崿F(xiàn)拼圖小游戲

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)拼圖小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • JS事件綁定的常用方式實(shí)例總結(jié)

    JS事件綁定的常用方式實(shí)例總結(jié)

    這篇文章主要介紹了JS事件綁定的常用方式,結(jié)合實(shí)例形式總結(jié)分析了javascript三種常見的事件綁定原理與操作技巧,需要的朋友可以參考下
    2019-03-03
  • JavaScript多態(tài)與封裝實(shí)例分析

    JavaScript多態(tài)與封裝實(shí)例分析

    這篇文章主要介紹了JavaScript多態(tài)與封裝,結(jié)合實(shí)例形式分析了JavaScript多態(tài)與封裝的概念、功能、優(yōu)缺點(diǎn)以及相關(guān)問題與注意事項(xiàng),需要的朋友可以參考下
    2018-07-07
  • Ajax實(shí)現(xiàn)搜索框提示功能

    Ajax實(shí)現(xiàn)搜索框提示功能

    這篇文章介紹了Ajax實(shí)現(xiàn)搜索框提示功能的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • JS實(shí)現(xiàn)頁(yè)面數(shù)據(jù)懶加載

    JS實(shí)現(xiàn)頁(yè)面數(shù)據(jù)懶加載

    這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)頁(yè)面數(shù)據(jù)懶加載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02

最新評(píng)論