diff --git a/docs/bom/window.md b/docs/bom/window.md index f5aab8e..993fd9b 100644 --- a/docs/bom/window.md +++ b/docs/bom/window.md @@ -55,6 +55,15 @@ window.open().opener === window // true 上面表达式会打开一个新窗口,然后返回`true`。 +如果两个窗口之间不需要通信,建议将子窗口的`opener`属性显式设为`null`,这样可以减少一些安全隐患。 + +```javascript +var newWin = window.open('example.html', 'newWindow', 'height=400,width=400'); +newWin.opener = null; +``` + +上面代码中,子窗口的`opener`属性设为`null`,两个窗口之间就没办法再联系了。 + 通过`opener`属性,可以获得父窗口的全局属性和方法,但只限于两个窗口同源的情况(参见《同源限制》一章),且其中一个窗口由另一个打开。``元素添加`rel="noopener"`属性,可以防止新打开的窗口获取父窗口,减轻被恶意网站修改父窗口 URL 的风险。 ```html @@ -113,7 +122,7 @@ if (frameEl) { ### window.top,window.parent -`window.top`属性指向最顶层窗口,主要用于在子窗口里面获取顶层的父窗口。 +`window.top`属性指向最顶层窗口,主要用于在框架窗口(frame)里面获取顶层窗口。 `window.parent`属性指向父窗口。如果当前窗口没有父窗口,`window.parent`指向自身。 @@ -123,6 +132,8 @@ if (window.parent !== window.top) { } ``` +对于不包含框架的网页,这两个属性等同于`window`对象。 + ### window.status `window.status`属性用于读写浏览器状态栏的文本。但是,现在很多浏览器都不允许改写状态栏文本,所以使用这个方法不一定有效。 @@ -300,7 +311,7 @@ window.open(url, windowName, [windowFeatures]) ``` - `url`:字符串,表示新窗口的网址。如果省略,默认网址就是`about:blank`。 -- `windowName`:字符串,表示新窗口的名字。如果该名字的窗口已经存在,则占用该窗口,不再新建窗口。如果省略,就默认使用`_blank`,表示新建一个没有名字的窗口。 +- `windowName`:字符串,表示新窗口的名字。如果该名字的窗口已经存在,则占用该窗口,不再新建窗口。如果省略,就默认使用`_blank`,表示新建一个没有名字的窗口。另外还有几个预设值,`_self`表示当前窗口,`_top`表示顶层窗口,`_parent`表示上一层窗口。 - `windowFeatures`:字符串,内容为逗号分隔的键值对(详见下文),表示新窗口的参数,比如有没有提示栏、工具条等等。如果省略,则默认打开一个完整 UI 的新窗口。如果新建的是一个已经存在的窗口,则该参数不起作用,浏览器沿用以前窗口的参数。 下面是一个例子。 @@ -341,7 +352,13 @@ var popup = window.open( 对于那些可以打开和关闭的属性,设为`yes`或`1`或不设任何值就表示打开,比如`status=yes`、`status=1`、`status`都会得到同样的结果。如果想设为关闭,不用写`no`,而是直接省略这个属性即可。也就是说,如果在第三个参数中设置了一部分属性,其他没有被设置的`yes/no`属性都会被设成`no`,只有`titlebar`和关闭按钮除外(它们的值默认为`yes`)。 -另外,`open`方法的第二个参数虽然可以指定已经存在的窗口,但是不等于可以任意控制其他窗口。为了防止被不相干的窗口控制,浏览器只有在两个窗口同源,或者目标窗口被当前网页打开的情况下,才允许`open`方法指向该窗口。 +上面这些属性,属性名与属性值之间用等号连接,属性与属性之间用逗号分隔。 + +```javascript +'height=200,width=200,location=no,status=yes,resizable=yes,scrollbars=yes' +``` + +另外,`open()`方法的第二个参数虽然可以指定已经存在的窗口,但是不等于可以任意控制其他窗口。为了防止被不相干的窗口控制,浏览器只有在两个窗口同源,或者目标窗口被当前网页打开的情况下,才允许`open`方法指向该窗口。 `window.open`方法返回新窗口的引用。