我正在使用FireBreath创建一个跨浏览器插件,它利用了各自平台的一些本地库(Windows的一些基于。net的dll和Mac的基于Objective-C的dylibs/框架)。库显示的UI最终应该出现在其他窗口的前面(特别是在浏览器窗口的前面)。对于Windows,我使用win32 API来传递窗口处理程序并将其带到前台。这是目前工作良好。但是,我目前无法找到适合Mac的解决方案,因此Mac中的窗口总是出现在浏览器后面。是否有解决此问题的解决方案?
我试过以下方法,但不太成功:
1)将NSWindow的级别设置为更高的值(例如:NSFloatingWindowLevel)并调用orderFront方法。
2)在NSApp中设置activateignoingotherapps属性并调用makeKeyAndOrderFront方法。
这个问题是由Objective-C中的一个基本事实引起的,与FireBreath无关。NSWindow中的window对象在调用方法将其带到前台时没有初始化(nil)。一旦这个问题解决了,只需将窗口级别设置为NSFloatingWindowLevel就可以解决这个问题。
我能想到的最好的办法是启动另一个进程来处理UI的事情,并跨越边界进行对话。在管道化STDOUT和STDIN与之通信之前,我已经这样做了。