【javascript】Window.Open参数、返回值

本文详细介绍了网页弹窗的基本语法、各项参数及其实际应用,包括如何设置弹窗的外观、尺寸、位置等,并提供了多种调用方式,如通过函数、按钮、链接等触发弹窗。还讲解了如何实现定时关闭、加入关闭按钮、使用Cookie控制弹窗只出现一次等功能,最终通过实例展示了如何在一个页面内同时完成多个窗口的创建与控制。

 一、window.open()支持环境:

JavaScript1.0+/JScript1.0+/Nav2+/IE3+/Opera3+
二、基本语法:
window.open(pageURL,name,parameters)
其中:
pageURL为子窗口路径
name为子窗口句柄
parameters为窗口参数(各参数用逗号分隔)
三、示例:
<SCRIPT>
<!–
window.open(‘page.html’,'newwindow’,'height=100,width=400,top=0,left=0,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,status=no’)
//写成一行
–>
</SCRIPT>
脚本运行后,page.html将在新窗体newwindow中打开,宽为100,高为400,距屏顶0象素,屏左0象素,无工具条,无菜单条,无滚动条,不可调整大小,无地址栏,无状态栏。请对照。
上例中涉及的为常用的几个参数,除此以外还有很多其他参数,请见四。四、各项参数
其中yes/no也可使用1/0;pixelvalue为具体的数值,单位象素。
参数|取值范围|说明
alwaysLowered|yes/no|指定窗口隐藏在所有窗口之后
alwaysRaised|yes/no|指定窗口悬浮在所有窗口之上
depended|yes/no|是否和父窗口同时关闭
directories|yes/no|Nav2和3的目录栏是否可见
height|pixelvalue|窗口高度
hotkeys|yes/no|在没菜单栏的窗口中设安全退出热键
innerHeight|pixelvalue|窗口中文档的像素高度
innerWidth|pixelvalue|窗口中文档的像素宽度
location|yes/no|位置栏是否可见
menubar|yes/no|菜单栏是否可见
outerHeight|pixelvalue|设定窗口(包括装饰边框)的像素高度
outerWidth|pixelvalue|设定窗口(包括装饰边框)的像素宽度
resizable|yes/no|窗口大小是否可调整
screenX|pixelvalue|窗口距屏幕左边界的像素长度
screenY|pixelvalue|窗口距屏幕上边界的像素长度
scrollbars|yes/no|窗口是否可有滚动栏
titlebar|yes/no|窗口题目栏是否可见
toolbar|yes/no|窗口工具栏是否可见
Width|pixelvalue|窗口的像素宽度
z-look|yes/no|窗口被激活后是否浮在其它窗口之上
【1、最基本的弹出窗口代码】
其实代码非常简单:<SCRIPTLANGUAGE=”javascript”>
<!–
window.open(‘page.html’)
–>
</SCRIPT因为着是一段javascripts代码,所以它们应该放在<SCRIPTLANGUAGE=”javascript”>标签和</script>之间。<!–和–>是对一些版本低的浏览器起作用,在这些老浏览器中不会将标签中的代码作为文本显示出来。要养成这个好习惯啊。
Window.open(‘page.html’)用于控制弹出新的窗口page.html,如果page.html不与主窗口在同一路径下,前面应写明路径,绝对路径(http://)和相对路径(../)均可。用单引号和双引号都可以,只是不要混用。
这一段代码可以加入HTML的任意位置,<head>和</head>之间可以,<body>间</body>也可以,越前越早执行,尤其是页面代码长,又想使页面早点弹出就尽量往前放。
【2、经过设置后的弹出窗口】
下面再说一说弹出窗口的设置。只要再往上面的代码中加一点东西就可以了。
我们来定制这个弹出的窗口的外观,尺寸大小,弹出的位置以适应该页面的具体情况。<SCRIPTLANGUAGE=”javascript”>
<!–
window.open(‘page.html’,'newwindow’,'height=100,width=400,top=0,left=0,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,status=no’)
//写成一行
–>
</SCRIPT>参数解释:
<SCRIPTLANGUAGE=”javascript”>js脚本开始;
window.open弹出新窗口的命令;
‘page.html’弹出窗口的文件名;
‘newwindow’弹出窗口的名字(不是文件名),非必须,可用空”代替;
height=100窗口高度;
width=400窗口宽度;
top=0窗口距离屏幕上方的象素值;
left=0窗口距离屏幕左侧的象素值;
toolbar=no是否显示工具栏,yes为显示;
menubar,scrollbars表示菜单栏和滚动栏。
Resizable=no是否允许改变窗口大小,yes为允许;
location=no是否显示地址栏,yes为允许;
status=no是否显示状态栏内的信息(通常是文件已经打开),yes为允许;
</SCRIPT>js脚本结束
【3、用函数控制弹出窗口】<html>
下面是一个完整的代码
<head>
<scriptLANGUAGE=”JavaScript”>
<!–
functionopenwin(){window.open(“page.html”,”newwindow”,”height=100,width=400,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,status=no”)
//写成一行
}
//–>
</script>
</head>
<bodyonload=”openwin()”>
…任意的页面内容…
</body>
</html>
这里定义了一个函数openwin(),函数内容就是打开一个窗口。在调用它之前没有任何用途。
怎么调用呢?
方法一:<bodyonload=”openwin()”>浏览器读页面时弹出窗口;
方法二:<bodyonunload=”openwin()”>浏览器离开页面时弹出窗口;
方法三:用一个连接调用:
<ahref=”#”onclick=”openwin()”>打开一个窗口</a>
注意:使用的”#”是虚连接。
方法四:用一个按钮调用:
<inputtype=”button”onclick=”openwin()”value=”打开窗口”>
【4、同时弹出2个窗口】
对源代码稍微改动一下:
<scriptLANGUAGE=”JavaScript”>
<!–
functionopenwin()
{window.open(“page.html”,”newwindow”,”height=100,width=100,top=0,left=0,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,status=no”)
//写成一行
window.open(“page2.html”,”newwindow2″,”height=100,width=100,top=100,left=100,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,status=no”)
//写成一行
}
//–>
</script>
为避免弹出的2个窗口覆盖,用top和left控制一下弹出的位置不要相互覆盖即可。最后用上面说过的四种方法调用即可。
注意:2个窗口的name(newwindows和newwindow2)不要相同,或者干脆全部为空。OK?
【5、主窗口打开文件1.htm,同时弹出小窗口page.html】
如下代码加入主窗口<head>区:
<scriptlanguage=”javascript”>
<!–
functionopenwin()
{window.open(“page.html”,”",”width=200,height=200″)
}
//–>
</script>
加入<body>区:
<ahref=”1.htm”onclick=”openwin()”>open</a>即可。
【6、弹出的窗口之定时关闭控制】
下面我们再对弹出的窗口进行一些控制,效果就更好了。如果我们再将一小段代码加入弹出的页面(注意是加入到page.html的HTML中,可不是主页面中,否则…),让它10秒后自动关闭是不是更酷了?
首先,将如下代码加入page.html文件的<head>区:
<scriptlanguage=”JavaScript”>
functioncloseit()
{setTimeout(“self.close()”,10000)//毫秒}
</script>
然后,再用<bodyonload=”closeit()”>这一句话代替page.html中原有的<BODY>这一句就可以了。(这一句话千万不要忘记写啊!这一句的作用是调用关闭窗口的代码,10秒钟后就自行关闭该窗口。)
【7、在弹出窗口中加上一个关闭按钮】
<FORM>
<INPUTTYPE=’BUTTON’VALUE=’关闭’onClick=’window.close()’>
</FORM>
呵呵,现在更加完美了!
【8、内包含的弹出窗口-一个页面两个窗口】
上面的例子都包含两个窗口,一个是主窗口,另一个是弹出的小窗口。
通过下面的例子,你可以在一个页面内完成上面的效果。
<html>
<head>
<SCRIPTLANGUAGE=”JavaScript”>
functionopenwin()
{OpenWindow=window.open(“”,”newwin”,”height=250,width=250,toolbar=no,scrollbars=”+scroll+”,menubar=no”);
//写成一行
OpenWindow.document.write(“<TITLE>例子</TITLE>”)
OpenWindow.document.write(“<BODYBGCOLOR=#ffffff>”)
OpenWindow.document.write(“<h1>Hello!</h1>”)
OpenWindow.document.write(“Newwindowopened!”)
OpenWindow.document.write(“</BODY>”)
OpenWindow.document.write(“</HTML>”)
OpenWindow.document.close()}
</SCRIPT>
</head>
<body>
<ahref=”#”onclick=”openwin()”>打开一个窗口</a>
<inputtype=”button”onclick=”openwin()”value=”打开窗口”>
</body>
</html>
看看OpenWindow.document.write()里面的代码不就是标准的HTML吗?只要按照格式写更多的行即可。千万注意多一个标签或少一个标签就会出现错误。记得用OpenWindow.document.close()结束啊。
【9、终极应用–弹出的窗口之Cookie控制】
回想一下,上面的弹出窗口虽然酷,但是有一点小毛病(沉浸在喜悦之中,一定没有发现吧?)比如你将上面的脚本放在一个需要频繁经过的页面里(例如首页),那么每次刷新这个页面,窗口都会弹出一次,是不是非常烦人?:-(有解决的办法吗?Yes!;-)Followme.
我们使用cookie来控制一下就可以了。
首先,将如下代码加入主页面HTML的<HEAD>区:
<script>
functionopenwin()
{window.open(“page.html”,”",”width=200,height=200″)}
functionget_cookie(Name)
{varsearch=Name+”=”
varreturnvalue=”";
if(document.cookie.length>0){
offset=document.cookie.indexOf(search)
if(offset!=-1){
offset+=search.length
end=document.cookie.indexOf(“;”,offset);
if(end==-1)
end=document.cookie.length;
returnvalue=unescape(document.cookie.substring(offset,end))
}
}
returnreturnvalue;
}
functionloadpopup(){
if(get_cookie(‘popped’)==”){
openwin()
document.cookie=”popped=yes”
}
}
</script>
然后,用<bodyonload=”loadpopup()”>(注意不是openwin而是loadpop啊!)替换主页面中原有的<BODY>这一句即可。你可以试着刷新一下这个页面或重新进入该页面,窗口再也不会弹出了。真正的Pop-Only-Once!
写到这里弹出窗口的制作和应用技巧基本上算是完成了,俺也累坏了,一口气说了这么多,希望对正在制作网页的朋友有所帮助俺就非常欣慰了。
需要注意的是,JS脚本中的的大小写最好前后保持一致。
【10、关闭弹出窗口时候刷新父窗体】
引用下面的JS方法,实现关闭弹出窗口刷新父窗体
javascript:opener.location.href=opener.location.href;opener=null;window.close()
<think> 首先,用户的问题是关于"window.open返回值的查看方法",具体是"如何查看window.open返回值"。用户提供了多个引用,我需要基于这些引用来回答这个问题。 回顾引用内容: - 引用[1]:提到了对话框的返回值通过window.returnValue,可以通过window.close(value)返回。 - 引用[2]:讨论了window.open的基本用法和细节。 - 引用[3]:展示了父页面如何通过window.open打开子页面,并使用计时器监听子页面关闭,然后通过window.returnValue获取返回值。 - 引用[4]:子页面关闭时设置window.opener.window.returnValue并关闭自己。 - 引用[5]:展示了使用window.showModalDialog的例子,但用户明确问的是window.open。 用户的问题是针对window.open返回值查看方法。从引用[3]和[4]来看,关键点是通过window.returnValue属性来传递和获取返回值。 核心机制: - 当使用window.open打开一个新窗口时,新窗口(子窗口)可以通过window.opener访问父窗口。 - 子窗口可以设置父窗口的属性,如window.opener.window.returnValue。 - 父窗口需要监听子窗口的关闭或其他事件来获取这个值。 步骤总结: 1. **打开子窗口**:使用var wd = window.open(url, name, features);,wd是子窗口的引用。 2. **子窗口设置返回值**:在子窗口中,当需要返回值时,设置window.opener.window.returnValue = value; 然后关闭窗口或通知父窗口。 3. **父窗口获取返回值**:父窗口需要监听子窗口的状态,常见方式是通过计时器检查wd.closed属性;当子窗口关闭时,wd.closed变为true,然后访问wd.returnValue或window.returnValue。 从引用[3]: - 父页面代码: - var wd = window.open(...); - 设置计时器winTimer来检查wd.closed。 - 函数wisclosed() { if(wd.closed) { alert(window.returnVaule); ... } } —— 这里有个拼写错误,应该是window.returnValue,但引用中是window.returnVaule。 - 子页面代码: - 设置window.opener.window.returnVaule = "ok"; 然后window.close(); 在引用[4]中,子页面使用window.opener.window.returnVaule。 所以,正确的方法是: - 子窗口:设置window.opener.window.returnValue = "some value"; 然后关闭自己。 - 父窗口:使用计时器或事件监听器检查子窗口是否关闭,然后读取window.returnValue或wd.returnValue。 另外,引用[1]提到window.close(value)可以设置返回值,但这通常是针对模态对话框如showModalDialog;对于window.open,标准方式是直接设置属性。 用户引用[5]提到了showModalDialog,但用户的问题明确是window.open,所以我应该专注于window.open。 回答结构: - 根据系统指令,使用中文回答。 - 结构清晰,逐步解释。 - 引用的段落末尾添加引用标识,如[^1]。 - 生成相关问题。 大纲回答: 1. **解释window.open返回值机制**:简要说明window.open返回一个窗口引用wd,但返回值是通过属性传递。 2. **详细步骤**: - 步骤1: 父窗口打开子窗口。 - 步骤2: 子窗口设置返回值。 - 步骤3: 父窗口监听和获取返回值。 3. **示例代码**:提供简单的代码示例,参考引用[3]和[4]。 4. **注意事项**:如浏览器兼容性、安全问题(引用[2]提到)。 5. **生成相关问题**:在回答结束时添加。 生成相关问题: - 例如: 1. window.open的其他参数有哪些? 2. 如何确保跨浏览器的兼容性? 3. window.open的安全风险有哪些? 确保LaTeX格式:用户的问题没有数学表达式,所以可能不需要。但如果有变量等,用$...$格式。 回答内容: - 引用来源:引用[3]和[4]是主要相关的。 - 结尾添加引用标识。 </think> ### window.open返回值查看方法详解 通过分析提供的引用内容,我发现`window.open`本身不直接返回用户数据值,而是返回一个对新窗口的引用对象(`WindowProxy`对象)。要获取子窗口传递的“返回值”,需通过`window.returnValue`属性结合窗口事件监听实现。以下是详细步骤和方法说明: #### 1. **核心机制说明** - `window.open()`的返回值是子窗口的引用(例如`var wd = window.open(...)`),可通过该引用访问子窗口属性[^2]。 - 子窗口通过设置`window.opener.window.returnValue`向父窗口传递数据[^3][^4]。 - 父窗口需监听子窗口关闭事件(如使用计时器检查`closed`属性)来获取`returnValue`[^3]。 #### 2. **父窗口实现返回值获取的步骤** ```javascript // 步骤1: 打开子窗口并保存引用 var wd = window.open("child.html", null, "width=400,height=300"); // wd为子窗口引用[^3][^2] // 步骤2: 设置计时器监听子窗口关闭(推荐方式) var winTimer = setInterval(checkChildClosed, 500); // 每500ms检查一次 function checkChildClosed() { if (wd.closed) { // 检测子窗口是否关闭 alert(window.returnValue); // 获取返回值 clearInterval(winTimer); // 清除计时器 // 返回值处理逻辑(例如赋值给变量) } } ``` - **关键点**:使用`wd.closed`判断子窗口状态,关闭后通过`window.returnValue`读取数据[^3]。 #### 3. **子窗口设置返回值的步骤** ```javascript // 在子窗口代码中(例如child.html) function setReturnValue() { window.opener.window.returnValue = "返回的数据"; // 例如字符串、对象等[^3][^4] window.close(); // 关闭子窗口 } ``` - **触发方式**:在子窗口按钮事件或特定逻辑中调用`setReturnValue`[^4]。 - **注意**:`window.opener`确保父窗口可访问,这是数据传递的基础[^2]。 #### 4. **完整示例及注意事项** - **父窗口示例**(参考引用[3]): ```html <input type="button" onclick="openWindow();" value="打开子窗口"> <script> var wd; function openWindow() { wd = window.open("child.html", null, "height=300,width=450"); if (wd) wd.focus(); winTimer = setInterval(checkClosed, 500); } function checkClosed() { if (wd.closed) { console.log("返回值:", window.returnValue); // 输出到控制台 clearInterval(winTimer); } } </script> ``` - **子窗口示例**(参考引用[4]): ```html <input type="button" onclick="setReturn();" value="关闭并返回值"> <script> function setReturn() { window.opener.window.returnValue = { status: "success", data: 123 }; // 可返回复杂对象 window.close(); } </script> ``` - **注意事项**: - **兼容性**:现代浏览器均支持此方法,但需确保跨域安全策略允许`window.opener`访问[^2]。 - **替代方案**:如果需模态对话框效果,可用`window.showModalDialog`(如引用[5]),但已逐渐被弃用。 - **错误处理**:监听前检查`wd`是否有效(例如`if (wd) {...}`)避免空引用错误[^3]。 #### 5. **常见问题解决** - **返回值未获取到**:检查子窗口是否正确设置`window.opener.window.returnValue`,并确认父窗口监听逻辑在子窗口关闭后执行。 - **安全限制**:如果父子窗口域名不同,浏览器可能阻止`opener`访问,需配置CORS或使用`postMessage`替代[^2]。 ####
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值