如何关闭由window.open打开的窗口?

时间:2019-07-15 03:56:09

标签: javascript reactjs

如何关闭由window.open打开的窗口?目前,我有一个带有处理OAuth的服务器端的reactjs应用。

流程如下: 1)用户单击按钮并打开一个新窗口,该窗口重定向到服务器端(服务器端重定向到身份验证服务)。 2)服务器端向身份验证成功后收到的用户信息的客户端发出套接字io事件 3)由window打开的窗口。open()最终将被关闭。

相关代码粘贴在下面

componentDidMount() {
  const {
    socket,
    provider
  } = this.props
  console.log('component did mount')

  socket.on(provider, user => { // Event listener
    // Window should be closed at this stage after listening to event.
    console.log(user)
    this.setState({
      user
    })
    this.props.addUser(user.name, 10)
  })
}

startAuth() {
  const {
    provider
  } = this.props

  const width = 600,
    height = 600
  const left = (window.innerWidth / 2) - (width / 2)
  const top = (window.innerHeight / 2) - (height / 2)
  const url = `https://localhost:5000/${provider}`

  return window.open(url, '', // Open window to server side
    `toolbar=no, location=no, directories=no, status=no, menubar=no, 
          scrollbars=no, resizable=no, copyhistory=no, width=${width}, 
          height=${height}, top=${top}, left=${left}`
  )
}

我试图在socket.on()中执行window.close(),但是它关闭了错误的窗口,而不是window.open()打开的窗口。我还尝试在发出socket io事件后在服务器端添加window.close(),但它也没有做任何事情。非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您需要保留对打开的窗口的引用,并在其上调用close。

const opened = startAuth();

opened.close();