JS window.open()打开新窗口、监听页面打开关闭状态(详细)

使用 window 对象的 open() 方法可以打开一个新窗口。用法如下:

window.open (URL, name, features, replace)

参数列表如下:

  • URL:可选字符串,声明在新窗口中显示网页文档的 URL。如果省略,或者为空,则新窗口就不会显示任何文档。
  • name:可选字符串,声明新窗口的名称。这个名称可以用作标记 <a> 和 <form> 的 target 目标值。如果该参数指定了一个已经存在的窗口,那么 open() 方法就不再创建一个新窗口,而只是返回对指定窗口的引用,在这种情况下,features 参数将被忽略。
  • features:可选字符串,声明了新窗口要显示的标准浏览器的特征,具体说明如下表所示。如果省略该参数,新窗口将具有所有标准特征。
  • replace:可选的布尔值。规定了装载到窗口的 URL 是在窗口的浏览历史中创建一个新条目,还是替换浏览历史中的当前条目。

该方法返回值为新创建的 window 对象,使用它可以引用新创建的窗口。

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。
toolbar = yes | no | 1 | 0是否显示浏览器的工具栏。默认是 yes。
top = pixels窗口的 y 坐标
width = pixels窗口的文档显示区的宽度。单位为元素。

新创建的 window 对象拥有一个 opener 属性,引用打开它的原始对象。opener 只在弹出窗口的最外层 window 对象(top)中定义,而且指向调用 window.open() 方法的窗口或框架。

示例1

下面示例演示了打开的窗口与原窗口之间的关系。

win = window.open();  //打开新的空白窗口
win.document.write ("<h1>这是新打开的窗口</h1>");  //在新窗口中输出提示信息
win.focus ();  //让原窗口获取焦点
win.opener.document.write ("<h1>这是原来窗口</h1>");  //在原窗口中输出提示信息
console.log(win.opener == window);  //检测window.opener属性值

使用 window 的 close() 方法可以关闭一个窗口。例如,关闭一个新创建的 win 窗口可以使用下面的方法实现。

win.close;

如果在打开窗口内部关闭自身窗口,则应该使用下面的方法。

window.close;

使用 window.closed 属性可以检测当前窗口是否关闭,如果关闭则返回 true,否则返回 false。

下面是一个监听当前新开页面该窗口的打开关闭状态的示例

const winURL = window.open('URL');  // 设置要打开的对象
const loop = setInterval(() => {    // 使用定时器查询当前状态
    if (winURL && winURL .closed) {  // 进行判断条件   closed属性就是返回当前窗口的状态
      console.log('我被关闭了')
      clearInterval(loop);       // 清除定时器

      // Logical code
    }
  }, 500);

  • 11
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在使用`window.open`打开不同源的新窗口时,由于跨域安全策略的限制,无法直接在新窗口中设置sessionStorage和localStorage。这是因为浏览器对不同源的窗口之间的数据访问进行了限制。 但是,你可以通过以下方法在不同源的新窗口中传递数据: 1. 使用URL参数:将需要传递的数据作为URL参数附加到打开的URL中,然后在新窗口中解析URL参数来获取数据。例如: ```javascript var newWindow = window.open('https://example.com?data=value'); ``` 在新窗口页面中,你可以使用JavaScript解析URL参数来获取数据。 2. 使用postMessage API:使用postMessage API可以实现窗口间的安全跨域通信。在打开新窗口中,你可以使用`window.postMessage`发送消息,并在新窗口页面中添加事件监听器来接收消息。例如: 在当前窗口: ```javascript var newWindow = window.open('https://example.com'); newWindow.postMessage('value', 'https://example.com'); ``` 在新窗口页面中添加事件监听器: ```javascript window.addEventListener('message', function(event) { // 判断消息来源是否可信 if (event.origin === 'https://example.com') { // 获取传递的数据 var data = event.data; // 在新窗口中处理数据 sessionStorage.setItem('key', data); } }); ``` 通过以上方法,你可以在不同源的新窗口中传递数据,并在新窗口中进行处理。 请注意,使用postMessage API时需要确保消息来源可信,以防止恶意代码的注入和跨站点脚本攻击。 希望这可以帮助到你!如果你有更多问题,请随时问我。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值