@@ -55,6 +55,15 @@ window.open().opener === window // true
55
55
56
56
上面表达式会打开一个新窗口,然后返回` true ` 。
57
57
58
+ 如果两个窗口之间不需要通信,建议将子窗口的` opener ` 属性显式设为` null ` ,这样可以减少一些安全隐患。
59
+
60
+ ``` javascript
61
+ var newWin = window .open (' example.html' , ' newWindow' , ' height=400,width=400' );
62
+ newWin .opener = null ;
63
+ ```
64
+
65
+ 上面代码中,子窗口的` opener ` 属性设为` null ` ,两个窗口之间就没办法再联系了。
66
+
58
67
通过` opener ` 属性,可以获得父窗口的全局属性和方法,但只限于两个窗口同源的情况(参见《同源限制》一章),且其中一个窗口由另一个打开。` <a> ` 元素添加` rel="noopener" ` 属性,可以防止新打开的窗口获取父窗口,减轻被恶意网站修改父窗口 URL 的风险。
59
68
60
69
``` html
@@ -113,7 +122,7 @@ if (frameEl) {
113
122
114
123
### window.top,window.parent
115
124
116
- ` window.top ` 属性指向最顶层窗口,主要用于在子窗口里面获取顶层的父窗口 。
125
+ ` window.top ` 属性指向最顶层窗口,主要用于在框架窗口(frame)里面获取顶层窗口 。
117
126
118
127
` window.parent ` 属性指向父窗口。如果当前窗口没有父窗口,` window.parent ` 指向自身。
119
128
@@ -123,6 +132,8 @@ if (window.parent !== window.top) {
123
132
}
124
133
```
125
134
135
+ 对于不包含框架的网页,这两个属性等同于` window ` 对象。
136
+
126
137
### window.status
127
138
128
139
` window.status ` 属性用于读写浏览器状态栏的文本。但是,现在很多浏览器都不允许改写状态栏文本,所以使用这个方法不一定有效。
@@ -300,7 +311,7 @@ window.open(url, windowName, [windowFeatures])
300
311
```
301
312
302
313
- ` url ` :字符串,表示新窗口的网址。如果省略,默认网址就是` about:blank ` 。
303
- - ` windowName ` :字符串,表示新窗口的名字。如果该名字的窗口已经存在,则占用该窗口,不再新建窗口。如果省略,就默认使用` _blank ` ,表示新建一个没有名字的窗口。
314
+ - ` windowName ` :字符串,表示新窗口的名字。如果该名字的窗口已经存在,则占用该窗口,不再新建窗口。如果省略,就默认使用` _blank ` ,表示新建一个没有名字的窗口。另外还有几个预设值, ` _self ` 表示当前窗口, ` _top ` 表示顶层窗口, ` _parent ` 表示上一层窗口。
304
315
- ` windowFeatures ` :字符串,内容为逗号分隔的键值对(详见下文),表示新窗口的参数,比如有没有提示栏、工具条等等。如果省略,则默认打开一个完整 UI 的新窗口。如果新建的是一个已经存在的窗口,则该参数不起作用,浏览器沿用以前窗口的参数。
305
316
306
317
下面是一个例子。
@@ -341,7 +352,13 @@ var popup = window.open(
341
352
342
353
对于那些可以打开和关闭的属性,设为` yes ` 或` 1 ` 或不设任何值就表示打开,比如` status=yes ` 、` status=1 ` 、` status ` 都会得到同样的结果。如果想设为关闭,不用写` no ` ,而是直接省略这个属性即可。也就是说,如果在第三个参数中设置了一部分属性,其他没有被设置的` yes/no ` 属性都会被设成` no ` ,只有` titlebar ` 和关闭按钮除外(它们的值默认为` yes ` )。
343
354
344
- 另外,` open ` 方法的第二个参数虽然可以指定已经存在的窗口,但是不等于可以任意控制其他窗口。为了防止被不相干的窗口控制,浏览器只有在两个窗口同源,或者目标窗口被当前网页打开的情况下,才允许` open ` 方法指向该窗口。
355
+ 上面这些属性,属性名与属性值之间用等号连接,属性与属性之间用逗号分隔。
356
+
357
+ ``` javascript
358
+ ' height=200,width=200,location=no,status=yes,resizable=yes,scrollbars=yes'
359
+ ```
360
+
361
+ 另外,` open() ` 方法的第二个参数虽然可以指定已经存在的窗口,但是不等于可以任意控制其他窗口。为了防止被不相干的窗口控制,浏览器只有在两个窗口同源,或者目标窗口被当前网页打开的情况下,才允许` open ` 方法指向该窗口。
345
362
346
363
` window.open ` 方法返回新窗口的引用。
347
364
0 commit comments