玩法介绍当前位置:万彩娱乐平台 > 玩法介绍 > >

子窗口、父窗口和Silverlight之间的相互调用

  

[子窗口,父窗口,Silverlight]子窗口、父窗口和Silverlight之间的相互调用

  其实,他们之间的调用还是很简单的~  
基础篇  
一、父页面调用子页面中的JS  
我们先创建一个子窗体  
代码如下:
  
var win  
$(function () {  
Root = $('#Root').val();//设置根目录  
});  
function OpenPlayer(id, type, add) {  
//这里是用来限制同一个窗口只能弹出一次的  
//其实就算不做限制,只要window.open参数中的name相同,就不会重复打开  
//window.open中的参数可以参考别的文章,有很多  
if (win == null || win.closed) {  
win = window.open('', 'win', 'width=870,height=650,top=1,left=0,scrollbars=0,resizable=0,status=1', true);  
}  
  
那怎么调用呢?

  
代码如下:

  
this.alert('hello world!');  
win.alert('hello world!');  
win.onload = function () { this.alert('test'); };  
  
众所周知,第一行是在本窗口弹出一个提示框(this可以一般都会省略~)  
那其实,this和win指向的是同类型,不同的对象罢了  
所以,他们的方法都是一样的。

  
第二行就是在子窗口中弹出一个提示框的代码。

  
你还可以在父窗体中写子窗体的事件~  
第三行的作用是,当子窗体加载完成后,父窗口弹出提示框。

  
二、子窗体调用父窗体  
这个和上面差不多,当父窗体打开一个子窗体后,你可以这样访问到父窗体  
window.opener  
这个对象就是父窗体,直接调用相应的函数即可  
三、子窗体调用silverlight函数或对象  
这个在MSND上有详细介绍,中文的~在这里,我帮大家提一下主要的几个步骤(调用silverlight对象的方法就不贴出来了,里面有)  
另附 传送门:  
1、现在silverlight中,给需要被调用的函数加上一个attribute——ScriptableMember  
代码如下:

  
// 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、在构造函数中注册这个对象  
代码如下:
  
MyScriptableManagedType smt = new MyScriptableManagedType();  
HtmlPage.RegisterScriptableObject("mySLapp", smt);  
//如果这个函数不是外部类中的函数,而是sl主体的函数,那直接传入this指针就可以了  
  
3、打开slverlight所在的页面  
在 Silverlight 对象标记中,添加具有值"pluginLoaded"的 onLoad 属性。

  
下面的示例演示用于 Silverlight 控件引用的 HTML 标记。

  
代码如下:

  
type="application/x-silverlight-2" width="100%" height="100%">  
  
  
  
  
  
  
4、在页上现有的 script 元素中,添加 pluginLoaded 方法的 JavaScript 函数。

  
使用 getHost 方法获取对 Silverlight 控件的引用。下面的示例演示 pluginLoaded 方法的 JavaScript 代码。

  
代码如下:

  
  
var slCtl=null;  
function pluginLoaded(sender,args){ // HTML version  
slCtl = sender.getHost();  
alert( slCtl.Content.mySLapp.MyToUpper("test string"));  
}  
  
  
四、silverlight调用子窗体中的js  
同样,也是MSDN上的文章~ 传送门:  
这个超级简单,直接:  
HtmlPage.Window.Invoke("MethodName", args);  
前面一个参数是函数名,后面的参数是这个函数需要传入的参数  
提高篇  
五、父页面打开子页面的时候,直接给silverlight传入参数  
这个主要是在初始化的时候用到  
在第一部部分中,我们打开了 这个子窗口  
这时候,我们可以用GET方式传入一些参数 例如:  
然后在silverlight中这样访问:  
  
string id = HtmlPage.Document.QueryString["id"];  
  
六、怎么样才能把子窗口前置?

  
我的子页面中的silverlight应用程序其实是一个音乐播放器,然后,所以子页面一般是最小化的。

  
但是,当我在silverlight应用程序里弹出MessageBox的时候它还是处于最小化状态… 这样对用户很不友好。

  
想要把子窗口前置的话,只能通过在父窗口中调用 win.focus() 函数  
但是,我们只要稍微处理一下,在父窗口,子窗口,sl中就都可以实现这个目的了  
所以可以这样做:  
1、在父窗口中写一个函数,叫Focus()  
然后调用 win.focus();  
2、在子窗口中写一个函数,叫Focus()  
调用 window.opener.Focus()  
3、最后,如果想让silverlight应用程序前置,你在父窗口或者子窗口中调用Focus()这个函数,也可以再silverlight中调用子窗口的Focus()函数  
  
七、怎么判断silverlight已经加载完成?  
下面有几个思路,有对有错  
(√)在silverlight应用程序的构造函数中,调用子页面或者父页面(通过子页面)的js 【这个方法可行,但是略显麻烦】  
(×)在子页面中 写 window.onload 事件 【这个事件触发的时候silverlight不一定加载完成】  
(√)还记得第三部分,第3步里的这个吗? 【推荐做法】  
加入这条以后,silverlight加载完成后就出触发子页面的这个函数 函数名可以更改

(责任编辑:admin)

上一篇:万彩娱乐平台javascript 拽拉效果 供JS初学者学习参

下一篇:国际棋牌游戏开发商 优秀开发商傲翼科技

推荐内容

客户服务热线

010-400-12345

在线客服