Electron调用nodejs的cpp .node扩展【非安全】

Electron调用nodejs的cpp .node扩展【非安全】

环境:

electron: 30.1.1
nodejs: 20.14.0

前言

Electron中可以非常容易的调用nodejs的js代码,但是对于cpp .node扩展需要一定的配置才能调用,下面介绍一种最简单的cpp扩展的调用方法,该方法的优点是调用简单,缺点是会降低应用程序的安全性,生产环境中需谨慎使用。

代码

$ tree
.
+--- build
|   +--- Release
|   |   +--- addon.node
+--- addon.cpp
+--- binding.gyp
+--- CMakeLists.txt
+--- index.html
+--- index.js
+--- package.json

index.html

<!DOCTYPE html>
<html><head><meta charset="UTF-8" /><title>Hello Electron</title><meta http-equiv="Content-Security-Policy" content="default-src 'self' 'unsafe-inline';">
</head><body><p id="version"></p><p id="napi"></p><script>let info = `electron: ${process.versions.electron}, nodejs: ${process.versions.node}, chrome: ${process.versions.chrome}, v8: ${process.versions.v8}`;document.getElementById("version").innerHTML = info;console.log(info);const addon = require('./build/Release/addon.node');info = addon.hello();document.getElementById("napi").innerHTML = info;console.log(info);</script>
</body></html>

index.js

const { app, BrowserWindow } = require('electron/main');
// app.commandLine.appendSwitch('remote-debugging-port', '9222');const createWindow = () => {const win = new BrowserWindow({width: 800,height: 600,webPreferences: {nodeIntegration: true,contextIsolation: false}})win.loadFile('index.html');
}app.whenReady().then(() => {createWindow();
})

addon.cpp

#include <node_api.h>static napi_value helloMethod(napi_env env, napi_callback_info info)
{napi_value result;napi_create_string_utf8(env, "hello world from napi", NAPI_AUTO_LENGTH, &result);return result;
}static napi_value Init(napi_env env, napi_value exports)
{napi_property_descriptor desc = {"hello", 0, helloMethod, 0, 0, 0, napi_default, 0};napi_define_properties(env, exports, 1, &desc);return exports;
}NAPI_MODULE(NODE_GYP_MODULE_NAME, Init)

binding.gyp

{"targets": [{"target_name": "addon","sources": [ "addon.cpp" ]}]
}

CMakeLists.txt

cmake_minimum_required(VERSION 2.8.12)project(addon)message(STATUS "operation system is ${CMAKE_SYSTEM}")add_definitions(-std=c++11)include_directories(${CMAKE_JS_INC})
include_directories(.)file(GLOB SOURCE_FILES addon.cpp)add_library(${PROJECT_NAME} SHARED ${SOURCE_FILES} ${CMAKE_JS_SRC})set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "" SUFFIX ".node")target_link_libraries(${PROJECT_NAME} ${CMAKE_JS_LIB})

package.json

{"name": "my-electron-app","version": "1.0.0","description": "","main": "index.js","scripts": {"start": "electron ."}
}

编译

node-gyp configure build

结果

electron: 30.1.1, nodejs: 20.14.0, chrome: 124.0.6367.243, v8: 12.4.254.20-electron.0hello world from napi

禁用 contextIsolation 和启用 nodeIntegration,会降低应用的安全性。务必谨慎使用,并确保你信任加载的所有代码和资源。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/456144.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文阅读与写作入门

文章目录 1.阅读第一篇论文(1)论文结构(2)目标 2.使用GPT辅助论文的阅读与写作3.专有名词(1)架构(2)网络(3)机器学习 4.文献翻译软件5.从哪里下载文献&#xff1f;6.如何判断(你自己的)研究工作的价值or贡献【论文精读李沐】7.经典论文(1)AlexNet 2012(2)FCN 全卷积 2014(3)Res…

【java面向对象编程】第一弹----类与对象的理解及类和对象的内存分配机制

一、类与对象 1.1类与对象的理解 &#xff08;1&#xff09;类就是数据类型&#xff0c;比如String类 &#xff08;2&#xff09;对象就是一个具体的实例 1.1.2类和对象的区别与联系 1) 类是抽象的&#xff0c;概念的&#xff0c;代表一类事物,比如人类,猫类.., 即它是数据…

异地组网最简单的方法

异地组网的方法多种多样&#xff0c;每种方法都有其特定的优缺点和适用场景&#xff0c;本期梳理一些相对简单且常用的异地组网方法&#xff0c;开始~ 一、使用硬件路由器的 VPN 功能 前提条件 你需要有支持 VPN 功能的路由器&#xff0c;如华硕、中兴等品牌。这些路由器在设置…

Newstar_week1_week2_wp

week1 wp crypto 一眼秒了 n费马分解再rsa flag&#xff1a; import libnum import gmpy2 from Crypto.Util.number import * p 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297…

「C/C++」C++17 之 std::variant 安全的联合体(变体)

#1024程序员节&#xff5c;征文# ✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计…

vue2 el-select赋值无效(无法选中)

背景&#xff1a;点击添加明细时&#xff0c;el-table会新增一条数据&#xff0c;其中&#xff0c;存货原申购用途 会根据 费用承担事业部 下拉框的值改变而改变&#xff0c;所以每次费用承担事业部发生变化时&#xff0c;都需要清空存货原申购用途的值 最开始是直接这样写的&a…

基于Java(SSM框架)+MySQL开发的小型英语学习网站

一、需求分析 英语已经越来越凸显其重要性。大学生一般都需要考CET-4或者CET-6&#xff0c;对于程序员&#xff0c;如果没有扎实的英语基础&#xff0c;看有些API文档也比较费力。生活中处处存在英语&#xff0c;也越来越体现英语的重要性&#xff0c;如何高效学习英语成了关键…

Openlayers高级交互(7/20):点击某点弹出窗口,自动播放视频

在使用 OpenLayers 构建 WebGIS 应用程序时,如果你想在地图上嵌入视频,通常的做法是将视频作为覆盖层(Overlay)添加到地图上。这里是一个示例,点击某点弹出窗口,自动播放视频。 效果图 专栏名称内容介绍Openlayers基础实战 (72篇)专栏提供73篇文章,为小白群体提供基础…

Vxe UI vue vxe-table 虚拟树表格的使用,流畅的渲染万级数据树结构表格

Vxe UI vue vxe-table 虚拟树表格的使用&#xff0c;流畅的渲染万级数据树结构表格 代码 普通树表格&#xff0c;一般存数据库里都是平级数据&#xff0c;vxe-table 的树渲染这就非常友好了&#xff0c;只有带有父子id关联的数组&#xff0c;就可以自动渲染树表格。 <te…

用 Vue 打造高效 Gherkin 自动化测试脚本编写工具

之前曾撰写过一篇有关运用 Pytest - BDD 框架开展自动化测试的文章。行为驱动开发&#xff08;BDD&#xff09;因着重于以业务需求和用户行为作为导向来编写测试脚本&#xff0c;故而广受关注。Gherkin 作为 BDD 中常用的语言&#xff0c;用于描述测试场景与步骤&#xff0c;具…

C#学习笔记(五)

C#学习笔记&#xff08;五&#xff09; 第 三 章 基本语句以及语法一、控制台的基本语句使用1. 方法重载2. 输入输出3.字符串格式化 二、赋值运算符、算数运算符、比较运算符三、数据类型转换常用方法使用、比较和选择1. 自动类型转换(隐式转换)2. 强制类型转换2.1 数值类型之间…

k8s-service详解

Service介绍 在kubernetes中&#xff0c;pod是应用程序的载体&#xff0c;我们可以通过pod的ip来访问应用程序&#xff0c;但是pod的ip地址不是固定的&#xff0c;这也就意味着不方便直接采用pod的ip对服务进行访问。 为了解决这个问题&#xff0c;kubernetes提供了Service资源…

COVON全意卫生巾,轻薄透气,绵柔速干,马来西亚热销中

随着女性健康意识的提高&#xff0c;卫生巾作为女性日常生活中的必需品&#xff0c;其品质和舒适度越来越受到关注。今天&#xff0c;我们要为大家介绍一款来自马来西亚热销的卫生巾——COVON全意卫生巾&#xff0c;以其轻薄透气、绵柔速干的特点&#xff0c;赢得了广大女性的喜…

故障诊断 | CNN-GRU卷积神经网络-门控循环单元组合模型的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | CNN-GRU卷积神经网络-门控循环单元组合模型的故障诊断(Matlab) 源码设计 %% CNN-GRU多特征分类预测

ORA-12170: TNS:Connect timeout occurred

tnsping xxx通 telnet xxx 端口通 sqlplus xxx/xxx提示ORA-12170: TNS:Connect timeout occurred 沟通了解到&#xff0c;目标端为oracle rac两节点&#xff0c;目前只开通了scan ip的端口策略。 处理办法&#xff1a; 开通两个vip的端口策略。 由于本次连接只是测试用的…

CSS综合案例——新闻详情

一、知识点 1、文字颜色 属性名&#xff1a;color 属性值&#xff1a; 颜色表示方式属性值说明使用场景颜色关键字颜色英文单词red,green,blue学习测试rgb表示法rg(r,g,b)r,g,b表示红绿蓝三原色&#xff0c;取值0-255了解rgba表示法rgba(r,g,b,a)a表示透明度&#xff0c;取…

Android 自定义 Dialog 实现列表 单选,多选,搜索

前言 在Android开发中&#xff0c;通过对话框让用户选择&#xff0c;筛选信息是很方便也很常见的操作。本文详细介绍了如何使用自定义 Dialog、RecyclerView 以及自定义搜索框 来实现选中状态和用户交互&#xff0c;文中大本分代码都有明确注释&#xff0c;主打一个简单明了&a…

JS | 如何使用 JavaScript 实现图片懒加载的淡入效果?

在现代的网页设计中&#xff0c;为了提高用户体验和网站性能&#xff0c;图片懒加载已经成为一个常见的技术。图片懒加载可以减少初始加载时间&#xff0c;延迟加载图片直到用户滚动到它们所在的位置。另外&#xff0c;为了进一步提升用户体验&#xff0c;添加淡入效果可以使页…

【忍无可忍,无需再忍】永久解决xshell or xftp 更新问题

1 背景介绍 提示“要继续使用此程序,您必须应用最新的更新或使用新版本”&#xff0c;笔者版本是xshell 6 距离一段时间不使用&#xff0c;或者遇到更新场景&#xff0c;总是会弹出这个框&#xff0c;实在是忍无可忍&#xff0c;无需再忍。 2 思路介绍 笔者上一篇关于如何解…

学习的内核,如何更好的学习呢?

文章目录 三步学习法起因&#xff1a;三步学习法是什么&#xff1f;三步学习法为什么&#xff1f;我自己的实例 三步学习法应该怎么办&#xff1f;总结&#xff1a; 三步学习法 起因&#xff1a; 今天在学习黑马的java设计模式&#xff0c;我会觉得我的学习进度很慢&#xff0…