如何测试窗口当前是否聚焦

时间:2014-11-27 23:03:18

标签: firefox firefox-addon

有没有办法测试窗口当前是否聚焦?我知道我可以使用在窗口上激活的addEventListener来执行此操作,并使用全局var来跟踪它,但问题是我需要在启动我的插件时测试它,所以这是在有机会添加任何事件侦听器之前。

执行window == Services.wm.getMostRecentWindow(null)将无法正常工作,因为其他应用程序窗口可能会超过它。所以我想我需要知道firefox是否是当前最顶层的窗口。

tldr:我需要测试当前窗口是否聚焦,这不仅意味着任何其他firefox窗口,而且意味着操作系统上的所有窗口。

1 个答案:

答案 0 :(得分:1)

使用附加sdk:

require("sdk/window/utils").isFocused(window)

没有附加组件sdk:

function isFocused(window) {
  const FM = Cc["@mozilla.org/focus-manager;1"].
                getService(Ci.nsIFocusManager);

  let childTargetWindow = {};
  FM.getFocusedElementForWindow(window, true, childTargetWindow);
  childTargetWindow = childTargetWindow.value;

  let focusedChildWindow = {};
  if (FM.activeWindow) {
    FM.getFocusedElementForWindow(FM.activeWindow, true, focusedChildWindow);
    focusedChildWindow = focusedChildWindow.value;
  }

  return (focusedChildWindow === childTargetWindow);
}

isFocused(window);