【问题标题】:Can i use OSX native API's in electron我可以在电子中使用 OSX 原生 API
【发布时间】:2016-04-12 18:00:29
【问题描述】:

有没有办法使用Electron 来使用 OSX Native API。假设我想使用System Configuration Framework,有没有办法使用本机 OSX API 的强大功能?

谢谢

【问题讨论】:

    标签: macos cross-platform electron


    【解决方案1】:

    我知道这是一个迟到的答案,但你有一些选择:

    • 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 很好。这里的优点是简单,缺点是您可能必须将它输出的字符串解析为有意义的数据结构,根据我的经验,这可能会比较困难。

    【讨论】:

    【解决方案2】:

    您还可以使用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")
            }
          }); 
    

    【讨论】:

    【解决方案3】:

    你也可以使用ffi直接从javascript调用原生库。

    【讨论】:

    • 可以从电子JS中使用node-ffi吗?
    • 是的,你可以。但这可能相当复杂,但它会起作用。您必须记住,这仅适用于 osx,并且在其他系统上具有依赖于平台的解决方案。如果它们不同,您还必须为电子版本而不是本地 nodejs 版本构建它。就像原生模块一样。
    猜你喜欢
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 2016-12-22
    • 2016-10-02
    • 2019-11-07
    • 2022-01-11
    • 1970-01-01
    相关资源
    最近更新 更多