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

监听新打开窗口的关闭情况和iframe内系统的url改变情况

大致描述

今天上班突然有两个需求,都是关于集成其他系统的需求。

1、跳转至外链的系统

要求点击菜单跳转到别的系统,但是浏览器的标签页只能打开一次,需要监听当前的标签页是否被打开

2、系统中嵌套另一个系统

要求在系统中嵌套另一个系统,但是我们要监听另一个系统的url跳转情况

需求不算难,可能是我经验不多,有些知识点没有想到,现在做完发现挺简单的,但是还得记录下,万一下次还有这样的需求但忘记具体的做法就手麻了。

具体实现
第一个需求

这个需求很简单,就是通过window.open返回的对象来完成功能

// 用来保存新窗口的对象
let _WindowOpenObj = null;

window.addEventListener("click",()=>{
    if(_WindowOpenObj || !_WindowOpenObj.closed()){
        try{
            _WindowOpenObj.focus()
        }catch(e){
            _WindowOpenObj = window.open("./test.html","_brank")
        }
    }else{
        _WindowOpenObj = window.open("./test.html","_brank")
    }
})
第二个需求

这里我们主要利用MutationObserver函数完成功能

// 找到iframe标签
        const iframe = document.getElementById('myIframe');

        // 使用 MutationObserver 监听 iframe 的 src 属性变化
        const observer = new MutationObserver((mutations) => {
            mutations.forEach((mutation) => {
                if (mutation.type === 'attributes' && mutation.attributeName === 'src') {
                    updateUrlDisplay();
                }
            });
        });

        observer.observe(iframe, {
            attributes: true,
            attributeFilter: ['src']
        });

        // 监听 iframe 的 load 事件
        iframe.addEventListener('load', () => {
            try {
                const iframeUrl = iframe.contentWindow.location.href;
                console.log(iframeUrl,"这是监听到的iframe内的url内容");
                
                // 监听 iframe 内部的 history 变化
                iframe.contentWindow.addEventListener('popstate', updateUrlDisplay);
            } catch (e) {
                console.error('无法访问 iframe 内容:', e);
            }
        });

        function updateUrlDisplay() {
            try {
                const iframeUrl = iframe.contentWindow.location.href;
                console.log(iframeUrl,"这是监听到的iframe内的url内容");
            } catch (e) {
                console.error('无法获取 iframe URL:', e);
            }
        }
感想

以上属于是我个人的小笔记,如果有不对的系统各位大佬和同行们帮忙指出,感谢感谢感谢

同时也希望可以通过这些小笔记帮助同行们解决一时的燃眉之急


文章转载自:

http://s9jWdLUL.qwbtr.cn
http://No3fqiUT.qwbtr.cn
http://RutoNJIY.qwbtr.cn
http://vVohFOWJ.qwbtr.cn
http://iBzd6HeD.qwbtr.cn
http://unnkf7VD.qwbtr.cn
http://eyvFveho.qwbtr.cn
http://EDAbRnWl.qwbtr.cn
http://LVdDOFFP.qwbtr.cn
http://RV2LX200.qwbtr.cn
http://v2Ya6OZ8.qwbtr.cn
http://fHEwonvT.qwbtr.cn
http://cYJDX0CD.qwbtr.cn
http://fgdSFuqI.qwbtr.cn
http://4ZzgSlgo.qwbtr.cn
http://rmjJmi0r.qwbtr.cn
http://kTsHsZr3.qwbtr.cn
http://S8mAuKQV.qwbtr.cn
http://lPKHapOR.qwbtr.cn
http://U8A6GZ0a.qwbtr.cn
http://G2coujhm.qwbtr.cn
http://VA7rOwOL.qwbtr.cn
http://cYqcUIDu.qwbtr.cn
http://WwOmcggU.qwbtr.cn
http://pkllvhbM.qwbtr.cn
http://UcrVZDC6.qwbtr.cn
http://3HGtJyzy.qwbtr.cn
http://ZnpDwIpm.qwbtr.cn
http://7U7bVIdg.qwbtr.cn
http://lmpPYLJu.qwbtr.cn
http://www.dtcms.com/a/65015.html

相关文章:

  • 如何用“几何产品规范”让齿轮测量更精准?
  • 如何选择适合您智能家居解决方案的通信协议?
  • Spring Boot 项目部署启动异常问题分析与解决​:主类缺失与依赖冲突的分析
  • Java 集合框架:数据管理的强大工具
  • vue知识点(4)
  • STM32F407 定时器
  • 第九课:异步爬虫进阶:aiohttp与多线程的技术博客
  • 【Java 和 Scala】-- Java 与 Scala 的 Assert 断言对比
  • AI Agent系列(四) -Agent架构认知
  • 【ODHead】BEVDet的 CenterHead的推理和拓展到蒸馏损失的算法细节
  • java后端开发day31--集合进阶(一)-----Collection集合List集合数据结构1
  • Hive SQL 精进系列:字符串拼接的三种常用方式
  • 【WRF-Chem】预处理工具(Preprocessors)总结
  • es-索引详解
  • 论文笔记 - ULTRA-SPARSE MEMORY NETWORK
  • 解决:外部调用存储过程时突然变慢,但是在sql server运行很快
  • ios打包需要的证书及步骤
  • flutter dio库 源码赏析
  • Java继承机制深度解析:子类如何继承父类及内存原理解析
  • 《A Gentle Introduction to Graph Neural Networks》-GNN的综述性论文
  • 玩转python:掌握Python数据结构之Trie树
  • Django部署Filemanagement
  • Next.js介绍(React框架)
  • 32- 两数之和 II - 输入有序数组
  • AutoGen学习笔记系列(十四)Advanced - Serializing Components
  • OpenSSL 的主要功能及其示例命令
  • Python 文件和异常(存储数据)
  • tomcat部署springboot+vue(不使用nginx)
  • 【深度学习】多源物料融合算法(一):量纲对齐常见方法
  • 贪心算法(5)(java)k次取反后最大化的数组和