【发布时间】:2016-04-12 18:00:29
【问题描述】:
有没有办法使用Electron 来使用 OSX Native API。假设我想使用System Configuration Framework,有没有办法使用本机 OSX API 的强大功能?
谢谢
【问题讨论】:
标签: macos cross-platform electron
有没有办法使用Electron 来使用 OSX Native API。假设我想使用System Configuration Framework,有没有办法使用本机 OSX API 的强大功能?
谢谢
【问题讨论】:
标签: macos cross-platform electron
我知道这是一个迟到的答案,但你有一些选择:
native node modules 允许您使用 C++ 和 ObjectiveC(或 Swift)编写并使用 v8 向 node.js 公开 API。这为您提供了很大的灵活性和功能,但需要最多的时间来开发。
NodObjC 是一个本地节点模块,允许您与 ObjC 运行时交互。我从未使用过它,但它似乎是一个可靠的项目,并且可以简化您尝试做的任何事情。与此类似的另一个选项是node-ffi。您引用的框架看起来像一个 ObjC API,所以不确定它是否适用于您的特定用例。
对于简单的东西,你可以使用node-applescript。我只玩过一点applescript,但我对你可以用它做的一些事情感到惊讶。例如,您可以使用它来设置您的应用程序在登录时启动(请参阅node-auto-launch)。虽然与上述相比有限,但如果它可以满足您的需求,它会更简单并且不需要编译,这很好。请注意,这将在后台使用child_process 来生成一个新进程来运行applescript。这可能会对您尝试做的任何事情产生一些影响。
如果 OSX API,您也可以只使用节点 child_process 模块 您尝试使用的 CLI 很好。这里的优点是简单,缺点是您可能必须将它输出的字符串解析为有意义的数据结构,根据我的经验,这可能会比较困难。
【讨论】:
您还可以使用child_process 的 exec 功能从您的电子应用程序执行脚本或终端命令。
您还可以轻松检查您的应用在哪个平台上运行:
var isWin = /^win/.test(process.platform);
if(isWin){
//windows
}else{
//macos
}
您还可以在构建后快速执行为使用 OSX 原生 API 的 OSX 应用程序创建的脚本:
exec(path.join(__dirname, './build-scripts/Network -agr1 ' + value1 + ' -agr2 ' + value2),
function (error, stdout, stderr) {
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
if (error !== null) {
console.log("Fail to execute script"+ error);
} else {
console.log("ok")
}
});
【讨论】:
process.platform 只能返回:darwin、freebsd、linux、sunos 或 win32。所以检查窗口就像process.platform === 'win32' 一样简单。见nodejs.org/api/process.html#process_process_platform
你也可以使用ffi直接从javascript调用原生库。
【讨论】: