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

news/2024/12/26 3:48:50 标签: javascript, electron, 前端

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

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

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);
javascript">// 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.niftyadmin.cn/n/5799757.html

相关文章

解决shallow update not allowed错误

在将外网代码推送到内网的时候,出现shallow update not allowed的错误。 发现只要在manifest中带了clone-depth"1"的仓均会如此。这里是因为没有完整clone导致push失败。 错误如下图 解决办法: git filter-branch -- --all 执行命令后&…

ABAP - SAP历史变动数据

问题:查询凭证的变动历史,如要查询销售订单抬头的修改历史数据效果如图1.1所示 图 1.1 方法:事务代码(SE38):RSSCD100 查询对象类的方法,SE16N查询TCDOB表

浅谈算法交易

本文想基于我的简单理解说说什么是算法交易,或者说是量化交易。 原文地址请访问:浅谈算法交易 什么是算法交易? 刚开始接触算法交易的时候,对它的理解,它就是把我平时的交易规则搬进计算机里自动执行。这个理解也没…

如何在 Ubuntu 22.04 上安装 Ansible 教程

简介 Ansible 对于系统管理员和 DevOps 专家来说是一个非常有价值的工具,他们希望有效地自动化他们的 IT 工作流程。 无论是处理单个服务器的自动化还是庞大的网络,Ansible 的能力都非常出色。 本文提供了关于如何在 Ubuntu 22.04 上安装 Ansible 的详细…

VSCode 插件开发实战(七):插件支持了哪些事件,以及如何利用和监听这些事件

前言 VSCode 作为现代开发者的首选编辑器之一,其核心优势在于其高度可扩展性。通过自定义插件,开发者可以根据自己的需求对编辑器进行功能扩展和优化。在这些插件开发过程中,事件处理和监听机制尤为重要,它们允许插件在特定事件发…

构建一个rust生产应用读书笔记7-确认邮件2

共享测试辅助 当每个集成测试文件都是一个独立的可执行文件时,共享测试辅助函数的一种常见方法是创建一个单独的模块,该模块可以被所有测试文件导入和使用。这个模块通常包含所有测试需要共用的辅助函数、常量、配置和其他资源。如果遵循这种做法&#…

共享无人系统,从出行到生活全面覆盖

共享无人系统已经覆盖到我们生活中的方方面面,出行上,比如共享自行车小程序、共享自行车;生活中,比如说棋牌室、茶室。我们以棋牌室举例。 通过开发使用共享无人系统,可以极大地降低人力成本,共享无人棋牌室…

《高等数学》第十一章 曲线积分与曲面积分

文章目录 第十一章 曲线积分与曲面积分第一节 对弧长的曲线积分第二节 对坐标的曲线积分第三节 格林公式及其应用斯托克斯公式 环流量与旋度 第十一章 曲线积分与曲面积分 第一节 对弧长的曲线积分 (1)第一类曲线积分定义 设 L \boldsymbol{L} L为二维 X O Y XOY XOY平面上…