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) => {
 
JavaScript监听如果rame内的路由变化,通常需要利用一些技术手段,因为浏览器出于安全考虑不会直接暴露iframe内部的导航事件。一种常见的做法是使用postMessage API或者ContentWindow对象。这里简单介绍两种方法: **1. 使用postMessage:** - 在外层窗口(即包含iframe的页面)添加事件监听器,当iframe页面发送消息(例如更改路由时),可以接收到这个消息。 ```javascript window.addEventListener('message', function(event) { if (event.origin === 'your_iframe_url') { // 检查消息来源 if (event.data === 'routeChanged') { // 路由改变时携带的特定数据 console.log('Iframe route changed'); // 在这里处理路由变化的业务逻辑 } } }, false); ``` - 在iframe内,通过`window.parent.postMessage()`发送路线变化的信息。 ```javascript // 假设你在iframe的路由组件里有这个方法 function changeRoute(newRoute) { window.parent.postMessage('routeChanged', '*'); // 发送消息到父窗口 } ``` **2. 使用ContentWindow对象:** - 如果iframe的内容脚本支持,你可以获取到它的`contentWindow`属性,然后添加事件监听。 ```javascript const iframe = document.getElementById('your_iframe_id'); if (iframe.contentWindow) { iframe.contentWindow.addEventListener('hashchange', () => { console.log('Iframe route changed'); // 处理路由变化逻辑 }); } ``` 注意,以上方法并不保证在所有情况下都能工作,特别是跨域的iframe可能会受到限制。此外,由于iframe环境的隔离,你可能无法获取到完整的URL变化,只能依赖于传递的部分信息。在实际应用中,请根据具体情况调整并测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1024小神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值