当前位置:Gxlcms > JavaScript > 子窗口、父窗口和Silverlight之间的相互调用_javascript技巧

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

时间:2021-07-01 10:21:17 帮助过:26人阅读

其实,他们之间的调用还是很简单的~
基础篇
一、父页面调用子页面中的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('http://loaclhost/sl.aspx', '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 代码。
代码如下: