【发布时间】:2013-04-29 05:40:22
【问题描述】:
我正在使用 FireBreath 创建一个跨浏览器插件,该插件利用一些用于各自平台的本机库(一些用于 Windows 的基于 .NET 的 DLL 和用于 Mac 的基于 Objective-C 的 dylib/框架)。该库显示一个 UI,它最终应该出现在其他窗口的前面(特别是在浏览器窗口的前面)。对于 Windows,我使用 win32 API 来传递窗口处理程序并将其置于前台。目前这工作正常。但是,我目前无法为 Mac 找到合适的解决方法,因此该窗口总是出现在 Mac 的浏览器后面。这个问题有解决办法吗?
我尝试了以下方法但没有取得多大成功:
1) 将NSWindow的级别设置为更高的值(例如:NSFloatingWindowLevel)并调用orderFront方法。
2) 在 NSApp 中设置 activateIgnoringOtherApps 属性并调用 makeKeyAndOrderFront 方法。
非常感谢您在这方面的任何帮助。
【问题讨论】:
-
也许 FireBreath 正在使用
LSBackgroundOnly中的Info.plist使 OS X 小程序部分成为后台应用程序?如果设置好了,你的插件就不能出现在前面,AFAIK... -
一个 NPAPI 插件确实有一个 Info.plist,但它丝毫不会影响这样的事情。问题是你在别人的过程中,他们控制着所有的东西
-
是的,这就是问题的原因。由于原生组件是由浏览器调用的,它们本质上是在浏览器提供的环境中运行的。我使用了一个小型测试应用程序 (Cocoa) 来测试本机组件的功能,并且那里一切正常。当使用 FireBreath 插件使用浏览器调用原生组件时会出现此问题。
标签: objective-c macos firebreath