当前位置: 首页 > article >正文

Electron -- 预加载脚本preload.js(三)

preload.js 是一个在渲染进程加载之前执行的脚本,它有权访问渲染器全局(例如 windowdocument)和 Node.js 环境(主进程)。这个脚本在网页内容加载之前执行,它具有比普通渲染器更高的权限,可以访问 Node.js API,同时也可以与网页内容安全的交互。

在 Electron 的 BrowserWindow 配置中指定 preload.js 路径。这个脚本在网页加载之前执行,但在网页的 JavaScript 开始运行之后: 

// main.js
const { app, BrowserWindow } = require('electron');
let mainWindow;
function createWindow() {
    mainWindow = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
            preload: path.join(__dirname, 'preload.js'),
            contextIsolation: true, // 推荐开启
            enableRemoteModule: false // 推荐禁用,用ipcMain和ipcRenderer代替
        }
    });
    mainWindow.loadFile('index.html');
}
app.on('ready', createWindow);
// preload.js
const { contextBridge, ipcRenderer } = require('electron');
contextBridge.exposeInMainWorld(
    'api', {
        send: (channel, data) => {
            // 白名单通道
            let validChannels = ['toMain'];
            if (validChannels.includes(channel)) {
                ipcRenderer.send(channel, data);
            }
        },
        receive: (channel, func) => {
            let validChannels = ['fromMain'];
            if (validChannels.includes(channel)) {
                // 过滤通道,只接受预定义的通道
                ipcRenderer.on(channel, (event, ...args) => func(...args));
            }
        }
    }
);
注:contextBridge 用于在网页中安全地暴露 sendreceive 方法,这些方法通过 ipcRenderer 与主进程进行通信,同时也限制了可以使用的通道,提高了安全性。

开发electron应用,preload.js 很重要: 

preload.js 文件在 Electron 应用中起着桥梁的作用,使得在保持安全的同时,渲染进程可以访问主进程的功能。通过精心设计 preload 脚本,可以有效地加强应用的安全性,避免直接暴露过多的 Node.js API 给可能的前端网页(渲染进程端)攻击。

 END.


http://www.kler.cn/a/451692.html

相关文章:

  • ReactPress 1.6.0:重塑博客体验,引领内容创新
  • StarRocks一次复杂查询引起的Planner超时异常
  • lxml提取某个外层标签里的所有文本
  • 后端-redis
  • SpringBoot简单使用Stomp
  • 菜鸟带新鸟——基于EPlan2022的部件库制作
  • 物联网系统中MQTT的概念建模方法
  • 打造高效租赁小程序让交易更便捷
  • 几个常见的Jmeter压测问题
  • lxml提取某个外层标签里的所有文本
  • Linux的mmap
  • 什么是领域驱动设计
  • [Unity] ShaderGraph动态修改Keyword Enum,实现不同效果一键切换
  • PaddlePaddle飞桨Linux系统Docker版安装
  • js的eval
  • Chromium GN 目标指南 - view_examples 自定义Button示例 (六)
  • 【es6复习笔记】let 和 const 命令(1)
  • Django models中的增删改查与MySQL SQL的对应关系
  • leetcode hot100 环形链表2
  • 深度学习环境安装
  • 内网穿透玩法之京东云亚瑟路由器刷神卓互联教程
  • 树莓集团:以产教融合助力人才培养
  • yii2 手动添加 phpoffice\phpexcel
  • 开放世界目标检测 Grounding DINO
  • 机器人C++开源库The Robotics Library (RL)使用手册(一)
  • CentOS7下的vsftpd服务器和客户端