当你点击一个简单的链接打开一个新窗口时,你没有对新窗口任何控制权。浏览器以默认的功能打开新窗口。此外,你也不能使用JavaScript引用新窗口的window对象,因此你不可能操纵新窗口的属性。看看下面的JavaScript语句:
window.open("http://www.docjs.com/", "win");
这条语句打开一个新窗口,显示页面http://www.docjs.com/。 新窗口的名字被赋值为 "win"。window对象的open()方法的基本语法是:
window.open(sURL, sName);
2个参数都是可选的,如果不想指定URL或者窗口名称,就使用空字符串("").
sURL 是一个字符串,它指定了要显示文档的URL。如果不指定URL,就产生一个空窗口。 sName 是定义的窗口名字,这个名字被用于<form>或者<a>标记的 TARGET 属性。在Internet Explorer 5 和以后版本,如果定义这个数值为 "_search",那么就将在浏览器的搜索区打开 sURL 。
如果带有同一参数sName执行window.open()方法2次,会发生什么呢?就象用HTML产生的窗口一样,如果你定义一个已经存在窗口的名字,那么open()方法将简单地利用存在的窗口,而不是打开一个新的。看看下面的脚本程序:
window.open("http://www.javascript.com/", "win");
window.open("http://www.docjs.com/", "win");
执行上面的语句,浏览器将打开一个名字为“win”的新窗口,并在其中显示页面www.javascript.com。第2条语句替换当前窗口内容为页面www.docjs.com。下面的语句产生2个不同的窗口显示各自的内容:
window.open("http://www.javascript.com/", "win1");
window.open("http://www.docjs.com/", "win2");
如果不指定新窗口的名字,浏览器就自动地产生一个新窗口。这同样适用于“_blank”,但是空字符串是另外一回事。对于Internet Explorer和Navigator,有几个重要的区别,如下:
| window.open("http://www.cnn.com/"); window.open("http://www.usatoday.com/"); |
|
| Internet Explorer | Navigator |
| 打开2个不同的窗口 | 打开2个不同的窗口 |
| window.open("http://www.cnn.com/", "_blank"); window.open("http://www.usatoday.com/", "_blank"); |
|
| Internet Explorer | Navigator |
| 打开2个不同的窗口 | 打开2个不同的窗口 |
| window.open("http://www.cnn.com/", ""); window.open("http://www.usatoday.com/", ""); |
|
| Internet Explorer | Navigator |
| 打开2个不同的窗口 | 只打开一个窗口,名字为空("") |
下面一行不会用到,只是列举出来。如果想命名窗口,就给出一个可以理解的名字(不是"")。如果不想命名,就干脆不指定这个参数,或者使用特殊的target位置"_blank"。
关于open()方法的一个重要之处是:open()方法几乎总是以window.open()的形式被调用执行,即使window代表了全局对象从而可以彻底省略。由于document对象也有open()方法,所以当我们想打开一个新窗口时,指定window对象将会清晰必要。在事件处理中,必须指定window.open(),而不能简单地使用open()。由于JavaScript中静态对象的作用范围限制,没有指定对象名字的open()调用等价于document.open()。比如说,当一个HTML按钮的事件处理发生时,范围就包含了按钮对象、表单对象、文档对象,以及窗口对象。这样,如果那样一个事件处理器引用了open()方法,识别器在文档对象就中止,事件处理器打开一个新的文档,而不是打开一个新的窗口。
