gpt4 book ai didi

javascript - 从 Mozilla 扩展(使用标准 I/O 通信)运行二进制文件的推荐方法?

转载 作者:行者123 更新时间:2023-11-29 10:21:32 24 4
gpt4 key购买 nike

我正在开发一个 Firefox 扩展,并想从中调用一个外部二进制文件。如果我可以使用标准输入/输出进行通信,那就太好了,所以我正在寻找最好(和最简单)的可能选项。这是我到目前为止学到的:

  • nslProccess不合适,因为我需要获取字符串作为返回值。 nslProccess 只能提供退出代码。
  • 我可以使用 XPCOM但如果我不需要修改二进制代码(它是 C,BTW),我会更喜欢。我还想尽可能提供最便携的解决方案。
  • Protozilla IPC 看起来像是一个解决方案,但我不确定这个项目是否得到维护。上次提交是 10 年前。

据我了解,此功能是在使用命令行 gpg 工具的 Enigmail 中实现的。有人对此有一些具体说明吗?

最佳答案

据我所知,Enigmail 使用二进制 XPCOM 组件来实现此目的,通常这不是一个可行的扩展解决方案。通过标准输入/输出与另一个进程通信不是 Gecko 平台的一部分。所以我认为你有三个选择:

  1. 使用js-ctypes直接调用必要的操作系统功能。例如。在 Windows 上你会调用 CreateProcess 并在 lpStartupInfo 中指定标准输入/输出的句柄范围。当然,您还必须使用操作系统功能来处理流。如果您需要支持多个操作系统,这很快就会变得非常棘手。
  2. 使用 shell 重定向输出。参见 this answer关于如何在 Windows 上使用 shell 运行命令,在类 Unix 系统上您将使用 "/bin/sh"而不是 env.get("COMSPEC") .您可以将命令行应用程序的输入数据写入 in.txt然后运行命令 foo < in.txt > out.txt - 输出将在 out.txt 中当命令完成时。显然,如果您需要在应用程序运行时与其交互,这将不起作用。
  3. 您可以更改应用程序以使用 Gecko 平台支持的不同 IPC 方法。通常这意味着 using TCP sockets绑定(bind)到 localhost .或者你把它变成一个动态库(.dll 在 Windows 上,.so 在类 Unix 系统上)并通过 js-ctypes 与它通信。 .

关于javascript - 从 Mozilla 扩展(使用标准 I/O 通信)运行二进制文件的推荐方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10858219/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com