当前位置: 首页 > news >正文

面试官:打开了一个新窗口,怎么知道这个窗口已经被打开过?

前言

我们现在来想这么一个场景,在掘金的文章管理页打开了一篇文章草稿,然后点击编辑,这个时候打开新标签页 A ,再点击一次编辑,打开了标签页 B

此时如果你在 A 编辑, B 是感知不到 A 的内容变动的,因为没做协同编辑。此时再到 B 编辑,那么就可能导致A标签页的内容丢失。

别问我是怎么 YY 出来这种场景的,因为我就真的犯过这种错😓

所以可不可以做一种机制,再第二次点击编辑的时候,弹出一个提示,告诉你这个标签页已经打开过?或者说直接输入 url 的时候,能不能获取到相同的 urltab 页?

如何打开前检测

比如说我们有一个函数 openBoard ,它接受一个 id 参数,用来打开一个编辑页面:

export const openBoard = (id) => {const url = `${location.protocol}//${location.host}/board/${id}`;window.open(url);
};

我们来看一下 window.open 这个 api ,它其实是有返回值的:

一个 WindowProxy (en-US) 对象。只要符合同源策略安全要求,返回的引用就可用于访问新窗口的属性和方法。

我们可以实现一个 mapidkey ,打开的 windowvalue ,具体实现如下:

let openWindowMap = {};
export const openBoard = (id) => {const url = `${location.protocol}//${location.host}/board/${id}`;const openedWindow = openWindowMap[id];if (openedWindow && !openedWindow.closed) {// 如果窗口已存在且未关闭openedWindow.focus(); // 切换到已存在的窗口} else {const newWindow = window.open(url); // 打开一个新窗口openWindowMap[id] = newWindow;}
};

点击打开链接的时候判断一下这个链接是否被打开过,如果已经被打开过,且打开的 tab 页还存在,没有被关闭,则切换到已经存在的窗口

否则就打开一个新窗口,并维护这份关系。

效果如下

Kapture 2024-04-29 at 23.27.14.gif

最后

以上就是本文的全部内容,算是一个小知识点吧。五一假期将至,提前祝大家假期愉快~

http://www.lryc.cn/news/342844.html

相关文章:

  • 机器学习项目实践-基础知识部分
  • CNN卷积神经网络,TensorFlow面试题
  • Android 官网Ota介绍
  • Redis(持久化)
  • 基于Flask的岗位就业可视化系统(一)
  • 嵌入式学习68-C++(运算符重载和虚函数)
  • UVA1048/LA3561 Low Cost Air Travel
  • 学习和分析各种数据结构所要掌握的一个重要知识——CPU的缓存利用率(命中率)
  • IOS自动化—将WDA打包ipa批量安装驱动
  • SAP PP学习笔记12 - 评估MRP的运行结果
  • AndroidStudio的Iguana版的使用
  • 通过方法引用获取属性名的底层逻辑是什么?
  • 自学错误合集--项目打包报错,运行报错持续更新中
  • KUKA机器人故障报警信息处理(一)
  • 数仓开发:DIM层数据处理
  • echars设置渐变颜色的方法
  • SpringBoot3项目打包和运行
  • Spring Cloud Gateway的部署
  • 算法提高之树的最长路径
  • git/gerrit使用遇到的问题
  • 机器学习第二天(监督学习,无监督学习,强化学习,混合学习)
  • Rust 解决循环引用
  • ICC2:如何解决pin density过高引起的绕线问题
  • Buuctf-Misc题目练习
  • 费马小定理详解
  • PXE批量安装
  • stm32f103c8t6最小系统板
  • QCefView 在 Linux 下的编译(更新)
  • 无卤素产品是什么?有什么作用?
  • esp32-cam 1. 出厂固件编译与测试