Macos 在OSX子视图中嵌套应用程序

Macos 在OSX子视图中嵌套应用程序,macos,nested,subview,Macos,Nested,Subview,我正在寻找一种方法,将另一个应用程序嵌入到我自己的视图中 商业原因是该公司有许多小型(基本上是一个带有独立浏览器的小型便携式web程序)希望嵌入到OSX程序中。理想情况下,这些电子应用程序将无缝集成并显示在子视图中,因此它们看起来就像我们更大程序中的小网络框架 我认为从编程的角度来说,打开另一个程序作为子视图是最容易的,但我会尽我所能。也许甚至可以用某种方式捕捉它。(.)可能是将另一个程序停靠在矿井内的一种方式,或者(越来越绝望)找到它的视图并发送命令来限制它在矿井顶部的大小和位置 到目前为止,

我正在寻找一种方法,将另一个应用程序嵌入到我自己的视图中

商业原因是该公司有许多小型(基本上是一个带有独立浏览器的小型便携式web程序)希望嵌入到OSX程序中。理想情况下,这些电子应用程序将无缝集成并显示在子视图中,因此它们看起来就像我们更大程序中的小网络框架

我认为从编程的角度来说,打开另一个程序作为子视图是最容易的,但我会尽我所能。也许甚至可以用某种方式捕捉它。(.)可能是将另一个程序停靠在矿井内的一种方式,或者(越来越绝望)找到它的视图并发送命令来限制它在矿井顶部的大小和位置

到目前为止,我所发现的一切都表明这是不可能的。我发现我可以走更绝望的道路。我可以启动一个进程,找到它的视图,并将它放置在我显示器上的一个点中;移动窗口或滚动内容时,发送消息以移动另一个窗口。但这并不是真正的整合,菜单是分开的,等等,但我不能整合它

有什么想法或有用的实施细节吗


编辑1:感谢您的回复。如果我们能让electron应用程序以某种方式公开他们的NSWindow呢?这能起到杠杆作用吗?我认为应用程序可以发送消息,并(不知何故,不确定是否准确地)在这个窗口中设置父窗口。在Windows API中,这要容易得多,因为您可以对任何对象调用SetParent,甚至是不同进程中的项。但是可可似乎更难。你不能那样做
Cocoa
要求每个UI应用程序只有一个
NSApplication
实例。因此,您需要
fork/exec
推出新流程并启动应用程序


如果您可以重新编译源代码,那么您可以创建
NSApplication
的自定义子类,并在所有应用程序中使用该自定义类,或者您可以在没有
NSApplication
实例的情况下创建其他应用程序的
NSthread
并从那里开始。

这在Mac OS X应用程序中并不是一件真正可以做的事情无法按您希望的方式“组合”——虽然在某些非常特定的情况下(例如,Safari或Chrome选项卡渲染器)可以与子流程共享视图,但这需要以非常特定的方式编写子应用程序才能实现。这在你描述的情况下是不可行的


如果你能访问这些电子应用程序的来源,请考虑将它们组合成一个单一的总体电子应用程序。或者,如果这些应用程序不可能共存于单个电子应用程序中,那么您可能需要考虑使用类似于构建包装器应用程序的一些东西;但是,请注意,这可能需要您自己实现部分电子框架。

这个答案的几个部分肯定是不正确的。您不能在线程中运行多个NSApplication实例,而且NSEvent在这里没有我知道的任何应用程序。@Daskwuff我不是说在线程中创建NSApplication实例,更新了我的答案。NSEvent我记得您可以全局捕获鼠标事件,但如何准确地使用它,我不确定使用fork/exec启动新流程是否会将子程序作为单独的应用程序启动,OP已经表示他们尝试过这样做(并且不足以满足他们的需要)。