window.close()失效 + Chrome浏览器调试线上代码

情况说明

  1. 主系统单点登录点击触发window.open()打开本系统。
  2. 是发布生产后的新需求 :要求退出登录后直接关闭当前系统页面。
  3. 本地运行增加了window.close()方法实现功能,点击退出后页面没反应。

排查过程

官方解析中说明,window.close() 方法只能关闭由window.open()或者浏览器直接输入url打开的页面,其余情况安全考虑是被限制的。

1. 验证window.close()失效是否与window.open()触发打开有关

于是保持原本退出登录的window.close()方法不变, 尝试增加打开按钮,点击后调用window.open()打开系统链接。

html 复制代码
<template>
	// ......其他代码
	<a href="javascript:;" @click="logout">退出</a>
	<a href="javascript:;" @click="logopen">打开</a>
</template>

<script setup>
function logout() {
	ElMessageBox.confirm('确定注销并退出系统吗?', '提示', {
		confirmButtonText: '确定',
		cancelButtonText: '取消',
		type: 'warning'
	}).then(() => {
		userStore.logOut().then((redirect) => {
			window.close()  // 使用close方法关闭
			location.href = redirect || ((import.meta.env.VITE_PUBLIC_PATH) + '/index');
	})
}).catch(() => { });
}

function logopen() {
	window.open('http://localhost/web/index')  // 使用open方法打开
}
</script>

尝试结果:

  1. 打开、退出功能全部正常。
  2. 点击打开按钮,跳转到本地运行的此系统页面。
  3. 点击退出按钮,打开的页面关闭,并且基础的退出清除功能还在。

判断: 主系统的打开方式没有问题,需要把焦点集中在此系统的window.close()失效上。

2. 在退出时,先手动打开一个新窗口,再关闭

在搜索时发现了处理办法,先打开空白窗口触发window.open(),再close,试一下。

js 复制代码
function logout() {
	ElMessageBox.confirm('确定注销并退出系统吗?', '提示', {
		confirmButtonText: '确定',
		cancelButtonText: '取消',
		type: 'warning'
	}).then(() => {
		userStore.logOut().then((redirect) => {
			window.open("about:blank","_self")  // 先打开一个空白窗口
			window.close()  // 使用close方法关闭
			location.href = redirect || ((import.meta.env.VITE_PUBLIC_PATH) + '/index');
	})
}).catch(() => { });
}

尝试结果: 无效。

3. 调试线上代码,验证是否跟环境有关

在本地环境下的尝试都不成功的情况下,猜测是否跟环境有关,尝试调试线上代码。

第一步:定位调试文件

根据退出功能中的提示词确定注销并退出系统吗?找到线上代码中退出按钮的所在文件

第二步:创建存放代码的文件夹并允许修改
第三步:修改内容并保存
第四步:刷新验证文件是否修改成功
第五步:验证退出功能

点击退出,页面关闭。

⚠️Tips:

  1. 必须要打开调试器 --- 之前替换的内容才会生效。
  2. 在调试完成 后,务必清除配置,以免对后续产生不必要的影响。

排查结果

由此可得,window.open()的失效跟环境有关,待部署后的再测试。

✅Over

相关推荐
一水鉴天9 分钟前
统一对象拓扑(UOT)设计全链定稿:从三件事分离到三继承 之1 20261010(豆包“查看聊天内容”继续)
前端·css
栖凤20 分钟前
Java 的 try-catch 在 Agent 里失效了,我用了 5 个模式才兜住
java·前端·python
粥里有勺糖20 分钟前
视野修炼第136期 | 前端小恐龙"Deno"被收购
前端·github·ai编程
修炼的dance25 分钟前
页面塞了13.88 MB字体,导出的PDF只有71 KB
前端
qq_3691736326 分钟前
如何将 AI 生成的 HTML 网页发布成在线链接?不用自己搭建服务器
前端·人工智能·html·效率工具·html 发布
风花一世月33 分钟前
⚡ 我把一座含氢能源园区搬进了浏览器(五类能流实时算守恒,在线直接玩)
前端·人工智能
羲云1 小时前
Claude 越界事件之后:Agent 权限设计为什么不能只靠提示词
前端
行者全栈架构师1 小时前
【鸿蒙心迹】鸿蒙网络请求架构实战——@ohos.net.http 到 Axios 封装、拦截器与统一错误处理(HarmonyOS 7.x)
前端·算法·架构
全栈Agent 小李1 小时前
【无标题】
前端·后端·agent·ai编程·全栈·cursor·mcp
羲云1 小时前
别让 AI 凭记忆做调研:给 WorkBuddy 接上可核验的实时搜索
前端