记一次使用window.open与window.close遇到的问题。
交互:点击按钮,新窗口打开第三方页面授权,授权后跳转回result page。如果授权成功,result page倒计时5秒后自动关闭窗口;授权失败,点击“关闭页面”按钮可关闭窗口。
实现:使用window.open(url, name, params)
打开第三方页面,第三方页面跳转到result page,result page执行window.close()
关闭窗口。
问题:授权成功时,倒计时完成后调用window.close()
无法关闭窗口。奇怪的是授权失败时,点击“关闭页面”按钮(同样是调用window.close()
)能够关闭窗口。
分析:本地模拟使用window.open(url, name, params)
打开result page,倒计时完成后,能够自动关闭窗口。猜测是线上经过第三方页面再跳转到result page后,浏览器认为当前页面不是由自己打开的,所以不生效。猜测需要用户手动触发才能生效。
解决:模拟用户点击行为后自动关闭的window.close()
生效
1 | const a = document.createElement('a') |
其他场景:
- 如果是打开新标签页:
window.open(url, '_blank')