window.open和window.location.href
open() 方法用于打开一个新的浏览器窗口或查找一个已命名的窗口。
window.open(URL,name,features,replace)
参数解释:
URL:一个可选的字符串,声明了要在新窗口中显示的文档的 URL。如果省略了这个参数,或者它的值是空字符串,那么新窗口就不会显示任何文档。
如:$('input').click(function(){
window.open('','','width:200,height:200');
});
效果则是:
但是如果把参数URL替换成空格,新页面会继承父窗口的内容。
$('input').click(function(){
window.open(' ','','width:200,height:200');
});
可以一次弹出多个窗口:
$('input').click(function(){
window.open('www.csshello.com','新窗口1');
window.open('www.baidu.com','新窗口2');
});
注意:窗口的名字不能相同,但可以都为空;
name:一个可选的字符串,该字符串是一个由逗号分隔的特征列表,其中包括数字、字母和下划线,该字符声明了新窗口的名称。这个名称可以用作标记 <a> 和 <form> 的属性 target 的值。如果该参数指定了一个已经存在的窗口,那么 open() 方法就不再创建一个新窗口,而只是返回对指定窗口的引用。在这种情况下,features 将被忽略。
PS:如果name使用名字已经存在,那么不会创建一个新的窗口,而是会返回对已经存在的窗口的引用。否则,则创建一个新的窗口。
name弹出窗口的名称,可以任意指定,也可以用’’来代替,其值可以为:
_blank 表示新开一个窗口,
_parent表示父框架窗口,
_self表示覆盖该窗口,
xxx表示覆盖名字为xxx的窗口(每个窗口都可以给他命名)
Features:一个可选的字符串,声明了新窗口要显示的标准浏览器的特征。如果省略该参数,新窗口将具有所有标准特征。
窗口特征(Window Features)
channelmode=yes|no|1|0 是否使用剧院模式显示窗口。默认为 no。
directories=yes|no|1|0 是否添加目录按钮。默认为 yes。
fullscreen=yes|no|1|0 是否使用全屏模式显示浏览器。默认是 no。处于全屏模式的窗口必须同时处于剧院模式。
height=pixels 窗口文档显示区的高度。以像素计。
left=pixels 窗口的 x 坐标。以像素计。
location=yes|no|1|0 是否显示地址字段。默认是 yes。
menubar=yes|no|1|0 是否显示菜单栏。默认是 yes。
resizable=yes|no|1|0 窗口是否可调节尺寸。默认是 yes。
scrollbars=yes|no|1|0 是否显示滚动条。默认是 yes。
status=yes|no|1|0 是否添加状态栏。默认是 yes。
titlebar=yes|no|1|0 是否显示标题栏。默认是 yes。
toolbar=yes|no|1|0 是否显示浏览器的工具栏。默认是 yes。
top=pixels 窗口的 y 坐标。
width=pixels 窗口的文档显示区的宽度。以像素计。
Replace:一个可选的布尔值。规定了装载到窗口的 URL 是在窗口的浏览历史中创建一个新条目,还是替换浏览历史中的当前条目。支持下面的值:
true - URL 替换浏览历史中的当前条目。
false - URL 在浏览历史中创建新的条目。
重要事项:请不要混淆方法 Window.open() 与方法 Document.open(),这两者的功能完全不同。为了使您的代码清楚明白,请使用 Window.open(),而不要使用 open()。
window.local.href 在本页跳转不能打开新窗口
运行下面代码可以看出window.open和window.local.href的区别
<input type="button" value="新窗口打开" onclick="window.open('http://www.csshello.com')">
<input type="button" value="当前页打开" onclick="window.location='http://www.csshello.com/'">
Self.location.href
self 即当前页面,等同于window或this ; 所以 self.location 就是当前页面的url
如果一个页面A.HTML 里面嵌套了一个B.HTML,在A中使用 window.location跳转就把整个页面跳转了;而在 A中镶嵌B页面的位置使用了self跳转就只是把B界面跳转了A页面其他地方没有变化!
self.location.href指当前窗口的URL地址,去掉self默认为当前窗口的URL地址.
一般用于防止外部引用,如果你的网页地址是: http://www.a.com 别人的是http://www.b.com, 他在他的页面用iframe等框架引用你的http://www.a.com,那么你可以用:
if(top.location.href!=self.location.href){
location.href="http://www.a.com";
}
来转向你的页面,
top指代的是主体窗口,这里top.location.href返回http://www.b.com;
http://www.b.com!=http://www.a.com,返回为真(true),则网页重定向到你的网页,做到防盗用的作用.
其中top.location.href!=self.location.href是什么意思呢?解释如下:
self.location 指的是当前页面的location
top.location 是指当前页面所属的父页面的location
判断当前页面和祖父页面的地址是不是一样的,如果是一样的,则祖父页面即当前页面,如果不一样,可能是当然页面处于弹出窗口或框架内
这个在很多场合可以用,可以用在防止自己的网页被别人IFRAME过去,即被别的框架引用过去。
总结:
window.open不一定是打开一个新窗口!
只要有窗口的名称和window.open中第二个参数中的一样就会将这个窗口替换,用这个特性的话可以在iframe和frame中来代替location.href。
window.location或window.open如何指定target?
这是一个经常遇到的问题,特别是在用frame框架的时候
解决办法: window.location 改为 top.location 即可在顶部链接到指定页 或 window.open("你的网址","_top");
下面我们再对弹出的窗口进行一些控制,效果就更好了。如果我们再将一小段代码加入弹出的页面(注意是加入page.html的HTML中,可不是主页面中,否则整个页面都被关闭了),让它固定时间后自动关闭。
首先,将如下代码加入page.html文件的<head>区:
<script language="JavaScript">
function closepage()
{
setTimeout("self.close()",50000)
}
</script>
然后,再用<body onload="closepage()"> 这一句话代替page.html中原有的<BODY>这一句就可以了。(这一句话千万不要忘记写啊!这一句的作用是调用关闭窗 口的代码,5秒钟后就自行关闭该窗口。)
如有问题,欢迎留言探讨!