LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

高效打造跨平台桌面应用:Electron加载服务器端JS

freeflydom
2024年9月20日 9:31 本文热度 723

在现代桌面应用开发中,使用 Electron 加载远程服务器托管的前端资源,再与本地 API 交互,能够带来灵活的部署和强大的本地功能支持。这种方式不仅提升了开发效率,还能充分利用 PC 端的资源和性能。

本文将深入解析如何使用 Electron 实现这一架构,并探讨其背后的关键技术,包括 ipcMain 和 ipcRenderer 进程间通讯,以及 preload.js 安全交互等内容。你将学会如何打造既能随时更新前端,又能高效利用本地硬件资源的桌面应用。

1. 服务器资源与 Electron 的高效结合

通常,我们的前端资源(HTML、CSS、JavaScript)可以托管在远程服务器上,比如通过 Nginx、Apache 等托管工具来部署静态页面和资源。

Electron 使用 BrowserWindow 加载这些远程资源:

const { app, BrowserWindow } = require('electron');
const path = require('path'); function createWindow() {    
   const win = new BrowserWindow({        width: 800,        height: 600,        webPreferences: {            preload: path.join(__dirname, 'preload.js'),            nodeIntegration: false,            contextIsolation: true,        },    });    // 加载服务器托管的前端页面 win.loadURL('https://example.com'); } app.whenReady().then(createWindow);

这样,Electron 应用可以直接从服务器加载最新的前端资源,同时主进程负责处理本地 API 的调用和交互。

2. preload.js:前端与本地 API 的安全桥梁

Electron 提供了 preload.js,这是一个在 Web 页面加载之前运行的脚本,它允许安全地在前端和主进程之间创建通信通道。通过 preload.js,我们可以将本地 API 的访问封装起来,并通过 contextBridge 暴露给前端。

const { contextBridge, ipcRenderer } = require('electron');
contextBridge.exposeInMainWorld('electronAPI', {
    sendMessage: (channel, data) => {        
       const validChannels = ['toMain'];        
       if (validChannels.includes(channel)) {            ipcRenderer.send(channel, data);        }    },    receiveMessage: (channel, func) => {        
       const validChannels = ['fromMain'];        
       if (validChannels.includes(channel)) {            ipcRenderer.on(channel, (event, ...args) => func(...args));        }    } });

这种方式确保前端无法直接访问 Node.js API,从而提高了应用的安全性。

3. 利用 ipcMain 和 ipcRenderer 实现前后端通讯

前端通过 preload.js 与主进程进行消息交互,而主进程通过 ipcMain 监听来自前端的请求。以下是主进程中如何处理前端请求并与本地 API 交互的示例:

const { ipcMain } = require('electron');
ipcMain.on('toMain', (event, data) => {
    console.log('收到前端数据:', data);    // 调用本地 API 或进行其他操作
    const response = callLocalAPI(data);    // 发送结果给前端
    event.sender.send('fromMain', response);
});
function callLocalAPI(data) {    return `处理后的数据: ${data}`;
}

前端可以使用暴露的 API 来发送消息并接收响应:

<script>
    window.electronAPI.sendMessage('toMain', '这是来自前端的数据');
    window.electronAPI.receiveMessage('fromMain', (response) => {
        console.log('收到主进程响应:', response);
    });
</script>

4. 综合工作流

通过这套架构,Electron 可以:

  1. 从服务器加载和渲染最新的前端资源。

  2. 使用 preload.js 提供安全的接口,允许前端与本地 API 进行通讯。

  3. 利用 ipcMain 和 ipcRenderer 实现前后端的双向通讯。

转自https://www.cnblogs.com/chenyishi/p/18418596


该文章在 2024/9/20 9:31:47 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved