You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Electron中监听页面内容变化应使用何种事件?

在Electron中监听页面内容变化的正确事件

你遇到的问题是因为web-contents-created仅在新的WebContents实例创建时触发(比如窗口初始化、打开新窗口/开发者工具),同一个窗口内的页面跳转不会生成新的WebContents,所以不会触发该事件。针对不同的场景,你需要使用以下对应的事件:

1. 监听跨页面导航(跳转到新网页)

使用WebContents的did-navigate事件,当窗口完成导航到新页面(包括点击链接跳转)时触发:

const { app, BrowserWindow } = require('electron');

app.whenReady().then(() => {
  const mainWindow = new BrowserWindow();
  mainWindow.loadURL('https://example.com');

  mainWindow.webContents.on('did-navigate', (event, url) => {
    console.log(`已导航到新页面:${url}`);
    // 此处处理页面跳转后的内容逻辑
  });
});

2. 监听页面内导航(如Hash变化)

如果是单页应用内的路由切换(不刷新页面),使用did-navigate-in-page事件:

mainWindow.webContents.on('did-navigate-in-page', (event, url, isMainFrame) => {
  if (isMainFrame) {
    console.log(`页面内导航到:${url}`);
  }
});

3. 监听页面DOM加载完成(内容就绪)

若需要在页面DOM完全加载后执行逻辑,使用dom-ready事件,每次页面(包括跳转后的页面)加载完成都会触发:

mainWindow.webContents.on('dom-ready', () => {
  console.log('当前页面DOM已加载完成');
  // 可在此注入脚本或操作页面内容
});

4. 监听页面内容动态变化(如单页应用内容更新)

如果是页面DOM元素动态增减/修改(无导航行为),Electron主进程没有直接对应的事件,需要在渲染进程中使用MutationObserver监听DOM变化:

// 渲染进程代码
const target = document.body;
const observerConfig = { 
  attributes: true, 
  childList: true, 
  subtree: true // 监听所有子节点变化
};

const mutationCallback = (mutations) => {
  mutations.forEach(mutation => {
    if (mutation.type === 'childList') {
      console.log('页面内容有元素新增/移除');
    } else if (mutation.type === 'attributes') {
      console.log(`元素属性${mutation.attributeName}发生变化`);
    }
  });
};

const observer = new MutationObserver(mutationCallback);
observer.observe(target, observerConfig);

// 停止监听时调用:observer.disconnect();

内容的提问来源于stack exchange,提问作者Qweru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 02:51:09