【笔记】 《js权威指南》- 第14章 Window对象 14.8 多窗口和窗体

时间:2021-11-15 22:59:39

1.Window.open();

参数1: 在新窗口中显示的url, 缺省值about:blank

参数2: 新窗口的名字,如果是已经存在的并且正在使用,那么会跳转到那个窗口,缺省值为"_blank"

参数3: 非标准,设置一些窗口属性;

参数4: 只有当第二个参数命名是一个已经存在的窗口才有效,true的话替换历史记录的当前条目,默认false是创建一个新的历史记录;

返回: 创建窗口的window对象。注意该对象收到同源策略约束,在非同源情况下大多数属性是无法访问的。

window.opener记录打开它的window对象。


2.Window.close();

通常只允许自动关闭由自己JS代码创建的窗口;

需要关闭其他窗口可以设置一个弹窗让用户确认关闭操作;

子窗体的close调用不会起作用;

当被引用的窗口关闭,该对象的closed属性为true, document属性为null。


3.窗体之间的关系:

(1).self或者window引用窗口或窗体自己;

(2).parent属性引用包含他的窗口或窗体的window对象,在*窗口中parent就是自身;

(3).top属性引用包含或引用自己的祖先窗口。

(4).通过iframe的contentWindow属性获得窗体的window对象;

(5).通过window对象的frameElement获得窗体的iframe元素;

var elt = document.getElementById("f1");
var win = elt.contentWindow;
win.frameElement === elt;
//*窗口不是iframe元素
window.frameElement === null;

(6).窗口对象的frames属性:保存子窗体的window对象的类数组。比如子窗体通过parent.frames[1]来访问兄弟窗体。

(7).iframe定义id时,其全局变量是window对象并不是元素本身,所以可以直接使用window.idName来获取子窗体。

(8).可以用window直接代替frames属性:e.g. window[0], window.length;


4.窗口窗体交互:

var s = new Set();
var s = new parent.Set();

由于可以引用另一个窗口或者窗体的window对象,可以调用对方的变量以及函数等。注意,两个js的源文档必须是同源的。

//在主窗体中
var i = 3;
//在子窗体中改变主窗体的i
parent.A.i = 4;