Bootstrap

electron在window上全局挂载自定义属性、方法

只需要在  preload.js  中加入以下代码:

const { contextBridge } = require('electron');
import { getLocalIp, scanIPs } from './utils/utils'; //我自己写的扫描ip端口的代码

contextBridge.exposeInMainWorld('myAPI', {
  desktop: true,
  ip: getLocalIp,
  scanIPs: scanIPs
});

main.js中还得加入,以防挂载不成功:

属性的相关文档:BrowserWindow | Electron 

示例代码:

//main.js
import { app, BrowserWindow } from 'electron';
import path from 'path';
import started from 'electron-squirrel-startup';
import './server.js';

if (started) {
  app.quit();
}

const createWindow = () => {
  const mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js'),
      devTools: true,
      nodeIntegration: true,
      nodeIntegrationInWorker: true,
      enableRemoteModule: true,
    },
  });
  if (MAIN_WINDOW_VITE_DEV_SERVER_URL) {
    mainWindow.loadURL(MAIN_WINDOW_VITE_DEV_SERVER_URL);
  } else {
    mainWindow.loadFile(path.join(__dirname, `../renderer/${MAIN_WINDOW_VITE_NAME}/index.html`));
  };
  mainWindow.maximize();
  mainWindow.setIcon(path.join(__dirname, '../../public/icon.png'));
  mainWindow.webContents.openDevTools();
};

app.whenReady().then(() => {
  createWindow();
  app.on('activate', () => {
    if (BrowserWindow.getAllWindows().length === 0) {
      createWindow();
    }
  });
});

app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit();
  }
});

注意:我用的  electron-forge  脚手架创建的项目,部分地方可能有不同!!!

效果展示:

;