Electron加载服务器端JS:高效打造跨平台桌面应用与本地 API 交互
在现代桌面应用开发中,使用 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 可以:
- 从服务器加载和渲染最新的前端资源。
- 使用
preload.js
提供安全的接口,允许前端与本地 API 进行通讯。 - 利用
ipcMain
和ipcRenderer
实现前后端的双向通讯。
结语
这种 Electron 与服务器资源结合的架构,不仅让前端资源管理更加灵活,还能高效利用本地 API 和硬件资源。无论是需要频繁更新的前端界面,还是依赖本地系统功能的应用场景,这种方式都能提供强大支持。
通过本文的示例,你已经掌握了如何通过 Electron 加载服务器资源并与本地 API 交互的核心技术,为你的桌面应用注入更多可能性。
让我们一起动手,打造更加灵活与强大的桌面应用吧!
Electron加载服务器端JS:高效打造跨平台桌面应用与本地 API 交互的更多相关文章
- js模块化/js模块加载器/js模块打包器
之前对这几个概念一直记得很模糊,也无法用自己的语言表达出来,今天看了大神的文章,尝试根据自己的理解总结一下,算是一篇读后感. 大神的文章:http://www.css88.com/archives/7 ...
- js中取得当前加载的js的src地址
在很多js框架中看到过,如果要动态加载框架内部的其他js,加载的时候加载的地址经常是一个相对的地址,只能是这样了哦,因为框架根本不知道用此框架的用户,将框架js文件放的具体目录,所以框架中一般会采用如 ...
- xss如何加载远程js的一些tips
在早期 , 对于xss我们是这样利用的 <script>window.open('http://xxx.xxx/cookie.asp?msg='+document.cookie)</ ...
- 网站加载css/js/img等静态文件失败
网站加载css/js/img等静态文件失败,报网站http服务器内部500错误.而服务器中静态文件存在且权限正常. 从浏览器中直接访问文件,出来乱码.这种问题原因在于iis中该网站mime配置报错,不 ...
- 根据打开页面加载不同Js
根据打开页面加载不同Js //根据打开页面加载不同JS $(document).ready(function(){ var href = document.URL; /*获取当前页面的URL*/ if ...
- jQuery中的ready方法及实现按需加载css,js
模拟jQuery中的ready方法及实现按需加载css,js 一.ready函数的实现 经常用jQuery类库或其他类库中的ready方法,有时候想想它们到底是怎么实现的,但是看了一下jQuery中的 ...
- Android WebView 加载超长 JS 数据
在之前的文章里面,我总结过WebView如何与网页交互,也就是Java如何和JS交互 —— Android WebView 总结 —— Java和JavaScript交互. 基于这篇文章,我们基本上能 ...
- Vue 加载外部js文件
Vue.js 加载外部js文件 在项目内新建一个config.js //变量的定义 export var config = { baseurl:'http://172.16.114.5:8088/M ...
- ASP.NET MVC ScriptBundle 不能加载.min.js文件
比如我用 bundles.Add(new ScriptBundle("~/bundles/easyui").Include( "~/Content/easyui/jque ...
- asp.net MVC发布iis无法加载css,js和图片
今天真够郁闷的,遇到了在本地能运行的项目到了iis服务器那里就不行了,无法加载css,js和图片,这里说清楚一下先,关于asp.net 的MVC中这样的情况其实不少,但是之前遇到的是在visual s ...
随机推荐
- [oeasy]python0129_unicode_中文字符序号_十三道大辙_字符编码解码_eval_火星文
unicode 中文字符分类 回忆上次内容 字符集 从博多码 到 ascii 再到 iso-8859 系列 各自割据 如何把世界上各种字符统进行编码 unicode顺势而生不断进化 不过字符总量超 ...
- 在Python中doc转docx,xls转xlsx,ppt转pptx(Windows)
在Python中doc转docx,xls转xlsx,ppt转pptx(Windows) 说明: 首次发表日期:2024-07-18 参考pypi包: doc2docx 缘起 我们一般使用Python开 ...
- SQL Server 帐号权限管理及C#编程应用(图解)
昨晚在群里讲解这部分内容,因为好久没操作过了,差点翻车...今天把它整理一下发出来,方便没听明白的小伙伴学习和理解. 我们平时学习数据库时,要么使用sa帐号,要么用windows默认帐号登录,总之都拥 ...
- SUM-2024成信大天梯赛
查看代码中有仔细的批注 L1-5 yihan的新函数 题解:(字符串)需要用到一个知识,整数与字符串之间的变换"to_string()",字符串变成整数"stoll()& ...
- PyCharm配置Miniconda3
打开PyCharm,点击"File"(文件)菜单,选择"Settings"(设置) 选择python interpreter中的配置 选择add 选择Conda ...
- onnxruntime无法使用GPU加速 加速失败 解决方法【非常详细】
onnx 无法使用GPU加速 加速失败 解决方法[非常详细] 应该是自目前以来最详细的加速失败解决方法GPU加速,收集了各方的资料.引用资料见后文 硬件配置: GPU CUDA版本:12.2 客户架构 ...
- 【Tutorial C】08 函数 Function
函数的定义 C源程序是由函数组成的. 最简单的程序有一个主函数 main(),但实用程序往往由多个函数组成, 由主函数调用其他函数,其他函数也可以互相调用. 函数是C源程序的基本模块,程序的许多功能是 ...
- python版本的两款NVIDIA显卡管理查询工具
本文所述如题; 给出两个python版本的NVIDIA显卡管理查询工具 1. py3nvml github下载地址: https://github.com/fbcotter/py3nvml Requ ...
- [COCI 2023/2024 #1] Mostovi 题解
前言 题目链接:洛谷. 题目分析 首先可以确定的是需要枚举断边,所以我们希望两次枚举之间能有些关联.不难想到类树形 DP 的套路,建 DFS 树,只不过这题除了讨论和父亲之间的边,还要考虑返租边.以下 ...
- 【金猿人物展】白鲸开源CEO郭炜:数据要素是未来数据“新能源”产业么?
纵观2023年中国数据行业发展与2024年数据产业趋势,就不得不提到2023年全年国家全年强调的数据要素的概念以及在2023年12月中国国家数据局等17个部门联合印发了<"数据要素×& ...