子窗口、父窗口和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('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 标记。
复制代码 代码如下:

<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、在页上现有的 script 元素中,添加 pluginLoaded 方法的 JavaScript 函数。
使用 getHost 方法获取对 Silverlight 控件的引用。下面的示例演示 pluginLoaded 方法的 JavaScript 代码。
复制代码 代码如下:

<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调用子窗体中的js
同样,也是MSDN上的文章~ 传送门:
这个超级简单,直接:
HtmlPage.Window.Invoke("MethodName", args);
前面一个参数是函数名,后面的参数是这个函数需要传入的参数
提高篇
五、父页面打开子页面的时候,直接给silverlight传入参数
这个主要是在初始化的时候用到
在第一部部分中,我们打开了 http://loaclhost/sl.aspx 这个子窗口
这时候,我们可以用GET方式传入一些参数 例如:http://loaclhost/sl.aspx?id=1
然后在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步里的这个吗? <param name="onLoad" value="pluginLoaded" /> 【推荐做法】
加入这条以后,silverlight加载完成后就出触发子页面的这个函数 函数名可以更改



相关阅读:
利用CSS,链接下划线也玩自定义
零代码平台实现
用HTML5.0制作网页的教程
网页技巧----变换图片的菜单
CSS实例教程:用position来布局页面
css之自动换行实现代码
css框架(CSS Frameworks):CSS框架应用
教你修复因安全更新导致的Windows 7蓝屏
Linux服务器ADSL利用NAT实现上网共享
asp:debug类调试程序
Linux系统下的matlab——sage开源软件包
QQ主面板的自动隐藏与Windows7窗口最大化
动态控制Table的js代码
jQuery对象[0]是什么含义?
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 农贸市场作文450字 有些疼,疼着疼着也就不疼了 关于人生感悟的句子 我养成了一个好习惯450字 玲玲懂事了作文200字 2016大学生网购调查报告 十八岁,倒计时……作文800字 我一个人,只是忽然很想你 死党的母子情深 纠结的烟疤(欣清似水) 春节看花灯作文 我与飞天之缘 外汇贷款合同 古琴此君 大学新生接待方案 运动会广播稿怎么写 秋殇别路 寻雾启示作文500字 2012年物业管理处文员工作个人总结-个人工作总结 小学三年级语文教师工作总结 超越梦想读后感600字 劳动节座谈会主持词 珍惜所拥有的那一片天 职业女性不可踏入的心理误区 一百年不许变 君子坦荡荡_君子坦荡荡的下一句是什么_君子坦荡荡,小人长戚戚_古诗词名句欣赏 散文的梦境 三字经(转载)作文300字 任公子钓大鱼 我的童年美好时光 小鹅卵石历险记 寄语初三 【原创】我若离去,后会无期 炎热时候的雷雨作文500字 引用 第三批学习实践活动第一阶段活动开展情况汇报 入党积极分子学习党章相关考试题 心再不是荒野,有了心痕 建党节美好寄语 检察院副科长岗位竞争演讲稿 求职信的结构:开头、主体与结尾 2016市十四届人民代表大会第五次会议闭幕式讲话稿 骂人宝典下载大全 我最喜爱妈妈的爱作文1200字 市级文明单位复查汇报材料 菜市场热闹非凡作文 除夕夜,好温馨 总体部安全标准化工作总结 小学生篮球比赛的通知范文 屋里的人 共享鲜花烂漫作文500字

Copyright © 2016 phpStudy |