父窗口、子窗口和Silverlight之间的相互调用
2010-08-15 22:12
253 查看
啊哈~ 爷爷,爸爸,儿子~ 三代同堂~
前两天做 silverlight 的东西,主页面打开一个子页面,然后子页面中包含一个 silverlight 应用程序
那难免会涉及到他们三者相互调用的问题
其实,他们之间的调用还是很简单的~
基础篇
[b]一、父页面调用子页面中的JS[/b]
我们先创建一个子窗体
代码
[b]四、silverlight调用子窗体中的js[/b]
同样,也是MSDN上的文章~ 传送门:
这个超级简单,直接:
HtmlPage.Window.Invoke("MethodName", args);
前面一个参数是函数名,后面的参数是这个函数需要传入的参数
提高篇
[b]五、父页面打开子页面的时候,直接给silverlight传入参数[/b]
这个主要是在初始化的时候用到
在第一部部分中,我们打开了 http://loaclhost/sl.aspx 这个子窗口
这时候,我们可以用GET方式传入一些参数 例如:http://loaclhost/sl.aspx?id=1
然后在silverlight中这样访问:
string id = HtmlPage.Document.QueryString["id"];
[b]六、怎么样才能把子窗口前置?[/b]
我的子页面中的silverlight应用程序其实是一个音乐播放器,然后,所以子页面一般是最小化的。
但是,当我在silverlight应用程序里弹出MessageBox的时候它还是处于最小化状态… 这样对用户很不友好。
想要把子窗口前置的话,只能通过在父窗口中调用 win.focus() 函数
但是,我们只要稍微处理一下,在父窗口,子窗口,sl中就都可以实现这个目的了
所以可以这样做:
1、在父窗口中写一个函数,叫Focus()
然后调用 win.focus();
2、在子窗口中写一个函数,叫Focus()
调用 window.opener.Focus()
3、最后,如果想让silverlight应用程序前置,你在父窗口或者子窗口中调用Focus()这个函数,也可以再silverlight中调用子窗口的Focus()函数
[b]七、怎么判断silverlight已经加载完成?[/b]
下面有几个思路,有对有错
(√)在silverlight应用程序的构造函数中,调用子页面或者父页面(通过子页面)的js 【这个方法可行,但是略显麻烦】
(×)在子页面中 写 window.onload 事件 【这个事件触发的时候silverlight不一定加载完成】
(√)还记得第三部分,第3步里的这个吗? <param name="onLoad" value="pluginLoaded" /> 【推荐做法】
加入这条以后,silverlight加载完成后就出触发子页面的这个函数 函数名可以更改
前两天做 silverlight 的东西,主页面打开一个子页面,然后子页面中包含一个 silverlight 应用程序
那难免会涉及到他们三者相互调用的问题
其实,他们之间的调用还是很简单的~
基础篇
[b]一、父页面调用子页面中的JS[/b]
我们先创建一个子窗体
代码
<script type="text/javascript"> var slCtl=null; function pluginLoaded(sender,args){ // HTML version slCtl = sender.getHost(); alert( slCtl.Content.mySLapp.MyToUpper("test string")); } </script>
[b]四、silverlight调用子窗体中的js[/b]
同样,也是MSDN上的文章~ 传送门:
这个超级简单,直接:
HtmlPage.Window.Invoke("MethodName", args);
前面一个参数是函数名,后面的参数是这个函数需要传入的参数
提高篇
[b]五、父页面打开子页面的时候,直接给silverlight传入参数[/b]
这个主要是在初始化的时候用到
在第一部部分中,我们打开了 http://loaclhost/sl.aspx 这个子窗口
这时候,我们可以用GET方式传入一些参数 例如:http://loaclhost/sl.aspx?id=1
然后在silverlight中这样访问:
string id = HtmlPage.Document.QueryString["id"];
[b]六、怎么样才能把子窗口前置?[/b]
我的子页面中的silverlight应用程序其实是一个音乐播放器,然后,所以子页面一般是最小化的。
但是,当我在silverlight应用程序里弹出MessageBox的时候它还是处于最小化状态… 这样对用户很不友好。
想要把子窗口前置的话,只能通过在父窗口中调用 win.focus() 函数
但是,我们只要稍微处理一下,在父窗口,子窗口,sl中就都可以实现这个目的了
所以可以这样做:
1、在父窗口中写一个函数,叫Focus()
然后调用 win.focus();
2、在子窗口中写一个函数,叫Focus()
调用 window.opener.Focus()
3、最后,如果想让silverlight应用程序前置,你在父窗口或者子窗口中调用Focus()这个函数,也可以再silverlight中调用子窗口的Focus()函数
[b]七、怎么判断silverlight已经加载完成?[/b]
下面有几个思路,有对有错
(√)在silverlight应用程序的构造函数中,调用子页面或者父页面(通过子页面)的js 【这个方法可行,但是略显麻烦】
(×)在子页面中 写 window.onload 事件 【这个事件触发的时候silverlight不一定加载完成】
(√)还记得第三部分,第3步里的这个吗? <param name="onLoad" value="pluginLoaded" /> 【推荐做法】
加入这条以后,silverlight加载完成后就出触发子页面的这个函数 函数名可以更改
相关文章推荐
- 子窗口、父窗口和Silverlight之间的相互调用
- 子窗口、父窗口和Silverlight之间的相互调用
- Silverlight中多个Xaml("场景"? or "窗口"? )之间的切换/调用/弹出/传参数问题小结
- [Html&JS] 一个网页上,不同的子父窗口iframe之间如何相互调用
- JavaScript 实现父,子页面(窗口)方法之间的相互调用
- 使用iframe的父子窗口之间的对象相互调用
- iframe的父子窗口之间的对象相互调用基本用法
- Silverlight中多个Xaml("场景"? or "窗口"? )之间的切换/调用/弹出/传参数问题小结
- Silverlight中多个Xaml("场景"? or "窗口"? )之间的切换/调用/弹出/传参数问题小结
- iframe的父子窗口之间的对象相互调用基本用法
- iframe 父子窗口相互之间调用语法
- iframe的父子窗口之间的对象相互调用基本用法
- Unity3D中js与C#之间相互调用的解决办法
- Fragment之间相互调用
- 两个结构体之间的相互调用
- js 函数之间的相互调用
- iframe 父窗口和子窗口相互的调用方法集锦
- android与h5之间的相互调用
- Android与JavaScript之间的相互调用
- 3. 调用另一个Activity,并两个Activity之间相互传递数据