【无标题】

Electron

.npmrc

安装electron依赖经常会不成功

在项目目录下创建.npmrc文件,设置镜像地址
npm config set strict-ssl false

javascript 复制代码
registry=https://registry.npm.taobao.org
electron-mirror=https://npm.taobao.org/mirrors/electron/

热更新/热加载

方案一

  1. 安装:npm install electron-reloader --save-dev

  2. 在主进程 js 文件

    javascript 复制代码
    try {
      require("electron-reloader")(module);
    } catch (_) {}
  3. 重启

方案二

  1. 安装:npm i nodemon --D
  2. 修改scripts"start": "nodemon --watch index.js --exec electron ."
  3. 再次运行npm run start,仅当index.js内容变化时,就会自动重新执行electron .来重启应用

菜单栏与边框

javascript 复制代码
app.on("ready", () => {
  mainWindow = new BrowserWindow({
    // 窗口位置
    x: 0,
    y: 0,
    //设置窗口宽高
    width: 400,
    height: 600,
    frame: false, // 无边框页面(同时菜单栏也不会显示,只是不会显示,可以通过快捷键操作)
  });
  mainWindow.removeMenu(); //去掉菜单栏
  mainWindow.loadFile("./src/main.html");
});

默认情况下,无边框窗口是不可拖拽的,可以通过设置

  1. -webkit-app-region: drag来告诉Electron哪些区域是可拖拽的
  2. -webkit-app-region: no-drag;来告诉Electron哪些区域是不可拖拽的
CSS 复制代码
html,body {
  height: 100%;
  width: 100%;
}

body{
  -webkit-app-region: drag;
}

.enable-click {
  -webkit-app-region: no-drag;
}

系统托盘

程序启动时,将应用程序加入系统托盘。在 Electron 中,借助 Tray 模块实现。

javascript 复制代码
//app 模块,控制整个应用程序的事件生命周期。
//BrowserWindow 模块,它创建和管理程序的窗口。
const { app, BrowserWindow, Tray, Menu } = require("electron");
const path = require("path");

const iconPath = path.join(__dirname, "./src/img/logo.png"); //应用运行时的标题栏图标

let mainWindow, tray;

//在 Electron 中,只有在 app 模块的 ready 事件被激发后才能创建浏览器窗口
app.on("ready", () => {
  mainWindow = new BrowserWindow({
    // frame: false, // 无边框页面
    resizable: false, //不允许用户改变窗口大小
    width: 800, //设置窗口宽高
    height: 600,
    icon: iconPath, //应用运行时的标题栏图标
    webPreferences: {
      backgroundThrottling: false, //设置应用在后台正常运行
      nodeIntegration: true, //设置能在页面使用nodejs的API
      contextIsolation: false,
      preload: path.join(__dirname, "./preload.js"),
    },
  });
  mainWindow.removeMenu(); //去掉菜单栏(菜单栏的快捷键)
  //   mainWindow.loadURL(`file://${__dirname}/src/main.html`);
  mainWindow.loadFile("./src/main.html");
  //   系统托盘
  tray = new Tray(iconPath); //实例化一个tray对象,构造函数的唯一参数是需要在托盘中显示的图标url
  tray.setToolTip("Tasky"); //鼠标移到托盘中应用程序的图标上时,显示的文本
  tray.on("click", () => {
    //点击图标的响应事件,这里是切换主窗口的显示和隐藏
    if (mainWindow.isVisible()) {
      mainWindow.hide();
    } else {
      mainWindow.show();
    }
  });
  tray.on("right-click", () => {
    //右键点击图标时,出现的菜单,通过Menu.buildFromTemplate定制,这里只包含退出程序的选项。
    const menuConfig = Menu.buildFromTemplate([
      {
        label: "Quit",
        click: () => app.quit(),
      },
      {
        label: "Next Step",
        click: () => app.quit(),
      },
    ]);
    tray.popUpContextMenu(menuConfig);
  });
});

IPC 通信

以隐藏窗口为例

渲染进程 TO 主进程

javascript 复制代码
// 页面文件
const { ipcRenderer } = require("electron");
ipcRenderer.send("mainWindow:close");
javascript 复制代码
// index.js
const { ipcMain } = require("electron");
ipcMain.on("mainWindow:close", () => {
  mainWindow.hide();
});

主进程 TO 渲染进程

窗口置顶

javascript 复制代码
mainWindow.setAlwaysOnTop(true); // 置顶

关闭窗口

javascript 复制代码
// 提醒窗口会在一段时间后关闭,可以通过remindWindow.close()来关闭窗口。
// 当窗口关闭后,我们可以设置remindWindow = null来回收分配给该渲染进程的资源。
mainWindow.on("closed", () => {
  mainWindow = null;
});
mainWindow.close();

访问后页面注入脚本

javascript 复制代码
相关推荐
长空任鸟飞_阿康21 小时前
AI 多模态全栈应用项目描述
前端·vue.js·人工智能·node.js·语音识别
星光一影21 小时前
废品回收系统小程序源码
mysql·php·html5
Baklib梅梅1 天前
故事叙述的力量:用Baklib创作让内容更具温度与共鸣
前端·ruby on rails·前端框架·ruby
百***78451 天前
node.js+npm的环境配置以及添加镜像(保姆级教程)
arcgis·npm·node.js
百***07181 天前
Node.js 与 Docker 深度整合:轻松部署与管理 Node.js 应用
docker·容器·node.js
菠萝+冰1 天前
npm中-d -g 和默认安装的区别
前端·npm·node.js
IT古董1 天前
在 React 项目中使用 Ky 与 TanStack Query 构建现代化数据请求层
前端·react.js·前端框架
夏日不想说话1 天前
一文搞懂 AI 流式响应
前端·node.js·openai
百***67031 天前
Node.js实现WebSocket教程
websocket·网络协议·node.js
q***51891 天前
如何在Windows系统上安装和配置Node.js及Node版本管理器(nvm)
windows·node.js