Skip to content

Commit ecd4528

Browse files
committed
docs(bom): edit window
1 parent e27c54c commit ecd4528

File tree

1 file changed

+20
-3
lines changed

1 file changed

+20
-3
lines changed

docs/bom/window.md

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,15 @@ window.open().opener === window // true
5555

5656
上面表达式会打开一个新窗口,然后返回`true`
5757

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+
5867
通过`opener`属性,可以获得父窗口的全局属性和方法,但只限于两个窗口同源的情况(参见《同源限制》一章),且其中一个窗口由另一个打开。`<a>`元素添加`rel="noopener"`属性,可以防止新打开的窗口获取父窗口,减轻被恶意网站修改父窗口 URL 的风险。
5968

6069
```html
@@ -113,7 +122,7 @@ if (frameEl) {
113122

114123
### window.top,window.parent
115124

116-
`window.top`属性指向最顶层窗口,主要用于在子窗口里面获取顶层的父窗口
125+
`window.top`属性指向最顶层窗口,主要用于在框架窗口(frame)里面获取顶层窗口
117126

118127
`window.parent`属性指向父窗口。如果当前窗口没有父窗口,`window.parent`指向自身。
119128

@@ -123,6 +132,8 @@ if (window.parent !== window.top) {
123132
}
124133
```
125134

135+
对于不包含框架的网页,这两个属性等同于`window`对象。
136+
126137
### window.status
127138

128139
`window.status`属性用于读写浏览器状态栏的文本。但是,现在很多浏览器都不允许改写状态栏文本,所以使用这个方法不一定有效。
@@ -300,7 +311,7 @@ window.open(url, windowName, [windowFeatures])
300311
```
301312

302313
- `url`:字符串,表示新窗口的网址。如果省略,默认网址就是`about:blank`
303-
- `windowName`:字符串,表示新窗口的名字。如果该名字的窗口已经存在,则占用该窗口,不再新建窗口。如果省略,就默认使用`_blank`,表示新建一个没有名字的窗口。
314+
- `windowName`:字符串,表示新窗口的名字。如果该名字的窗口已经存在,则占用该窗口,不再新建窗口。如果省略,就默认使用`_blank`,表示新建一个没有名字的窗口。另外还有几个预设值,`_self`表示当前窗口,`_top`表示顶层窗口,`_parent`表示上一层窗口。
304315
- `windowFeatures`:字符串,内容为逗号分隔的键值对(详见下文),表示新窗口的参数,比如有没有提示栏、工具条等等。如果省略,则默认打开一个完整 UI 的新窗口。如果新建的是一个已经存在的窗口,则该参数不起作用,浏览器沿用以前窗口的参数。
305316

306317
下面是一个例子。
@@ -341,7 +352,13 @@ var popup = window.open(
341352

342353
对于那些可以打开和关闭的属性,设为`yes``1`或不设任何值就表示打开,比如`status=yes``status=1``status`都会得到同样的结果。如果想设为关闭,不用写`no`,而是直接省略这个属性即可。也就是说,如果在第三个参数中设置了一部分属性,其他没有被设置的`yes/no`属性都会被设成`no`,只有`titlebar`和关闭按钮除外(它们的值默认为`yes`)。
343354

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`方法指向该窗口。
345362

346363
`window.open`方法返回新窗口的引用。
347364

0 commit comments

Comments
 (0)