js监听网页iframe里面元素变化其实就是监听iframe变化

想要监听网页里面iframe标签内容变化,需要通过监听网页dom元素变化,然后通过查询得到iframe标签,再通过iframe.contentWindow.document得到ifram内的document,然后再使用选择器得到body元素,有了body元素,就可以通过innerHTML得到ifram里面的内容了。

监听网页dom元素发生变化函数:使用了MutationObserver

  // 创建 MutationObserver 对象并传入回调函数const observer = new MutationObserver((mutationsList) => {// mutationsList 包含了所有发生的 DOM 改动信息for (let mutation of mutationsList) {if (mutation.type === 'attributes') {console.log(`iframe里面属性变化 ${mutation}`)} else if (mutation.type === 'childList') {console.log('iframe里面节点发生变化')}}})// 配置观察选项const config = { attributes: true, childList: true }// 开始观察目标节点及其后代节点的变化observer.observe(ele, config)

然后就是获取iframe变化的函数:

const listenCsdnContent = (url: String) => {if (url.includes('csdn') && url.includes('editor')) {const textInput = document.querySelector('.cke_wysiwyg_frame')const iframeDom = textInput.contentWindow.documentconst iframeBody = iframeDom.querySelector('body')console.log('iframe元素', iframeBody.innerHTML)}
}

最后将这个函数添加到dom变化的回调里面:

const observer = new MutationObserver((mutationsList) => {// mutationsList 包含了所有发生的 DOM 改动信息listenCsdnContent(curUrl)for (let mutation of mutationsList) {if (mutation.type === 'attributes') {console.log(`iframe里面属性变化 ${mutation}`)} else if (mutation.type === 'childList') {console.log('iframe里面节点发生变化')}}})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/506291.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

备战蓝桥杯---状态压缩DP基础2之TSP问题

先来一个题衔接一下: 与上一题的思路差不多,不过这里有几点需要注意: 1.因为某一列的状态还与上上一行有关,因此我们令f[i][j][k]表示第i行状态为j,第i-1行状态为k的最大炮兵数。 因此,我们可以得到状态转移方程&…

AWTK 开源串口屏开发(11) - 天气预报

# AWTK 开源串口屏开发 - 天气预报 天气预报是一个很常用的功能,在很多设备上都有这个功能。实现天气预报的功能,不能说很难但是也绝不简单,首先需要从网上获取数据,再解析数据,最后更新到界面上。 在 AWTK 串口屏中…

灯塔:CSS笔记(1)

CSS&#xff1a;层叠样式表 所谓层叠 即叠加的意思&#xff0c;表示样式可以一层一层的层叠覆盖 css写在style标签中&#xff0c;style标签一般写在head标签里面&#xff0c;title标签下面 <!DOCTYPE html> <html lang"en"> <head><meta cha…

蓝桥杯练习系统(算法训练)ALGO-992 士兵杀敌(二)

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 南将军手下有N个士兵&#xff0c;分别编号1到N&#xff0c;这些士兵的杀敌数都是已知的。   小工是南将军手下的军师&…

【【C语言简单小题学习-1】】

实现九九乘法表 // 输出乘法口诀表 int main() {int i 0;int j 0;for (i 1; i < 9; i){for (j 1; j < i;j)printf("%d*%d%d ", i , j, i*j);printf("\n"); }return 0; }猜数字的游戏设计 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdi…

Jenkins的Pipeline概念

文章目录 Pipeline什么是Jenkins Pipeline声明式和脚本式Pipeline语法为何使用PipelinePipeline概念PipelineNodeStageStep Pipeline语法概述声明式Pipeline脚本式Pipeline Pipeline示例 参考 Pipeline 什么是Jenkins Pipeline Jenkins Pipeline是一套插件&#xff0c;它支持…

ElasticSearch相关知识点

ElasticSearch相关知识点 1.了解ES ES的作用&#xff1a;ES是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;可以帮助我们从海量数据中快速找到需要的内容 ELK技术栈&#xff1a;ES结合kibana、Logstash、Beasts&#xff0c;也就是 elastic stack 。…

远程服务器Ubuntu 18.04安装VNC远程桌面

一、安装vnc 1.安装图形化界面工具 # 安装过程中会弹窗让选择配置&#xff0c;选lightdm sudo apt install ubuntu-desktop sudo apt-get install gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal 2.安装vnc sudo apt-get install x11vnc3.安装LightD…

政务信息化项目可行性研究报

第四章 总体建设方案 1 建设原则 本项目将在借鉴国内相关项目建设成功经验的基础上&#xff0c;充分利用现有先进、 成熟技术&#xff0c;并考虑长远发展需求&#xff0c;予以统一规划、统一布局、统一设计、规范标 准、突出重点、分步实施。 &#xff08;1&#xff09;标准…

【python报错】Intel MKL FATAL ERROR: Cannot load mkl/../../../libmkl_rt.so.2.

python报错&#xff1a; Intel MKL FATAL ERROR: Cannot load mkl/../../../libmkl_rt.so.2.在切换旧版numpy版本的时候&#xff0c;出现了这个报错&#xff0c;表现就是将numpy切换到<1.24的版本的时候&#xff0c;只要import numpy就弹出以上报错。 尝试了网上的各种方法…

面试经典150题——简化路径

"A goal is a dream with a deadline." - Napoleon Hill 1. 题目描述 2. 题目分析与解析 2.1 思路一 这个题目开始看起来并不太容易知道该怎么写代码&#xff0c;所以不知道什么思路那就先模拟人的行为&#xff0c;比如对于如下测试用例&#xff1a; 首先 /代表根…

动态规划(算法竞赛、蓝桥杯)--树形DP树形背包

1、B站视频链接&#xff1a;E18 树形DP 树形背包_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; const int N110; int n,V,p,root; int v[N],w[N]; int h[N],to[N],ne[N],tot; //邻接表 int f[N][N];void add(int a,int b){to[tot]b;ne[tot]h[a];h[a…