Javascript 返回XuleElement的document.activeElement

Javascript 返回XuleElement的document.activeElement,javascript,firefox-addon,xul,firefox-addon-sdk,Javascript,Firefox Addon,Xul,Firefox Addon Sdk,当用户在我的Firefox插件上按CTRL+SPACE时,我试图获得焦点元素 为此,我想使用document.activeElement来获取焦点元素,但它不起作用。它总是返回一个xulement 此加载项中只有两个文件: Lib/main.js var self = require ("sdk/self"); var workers = require("sdk/content/worker"); let worker = workers.Worker({

当用户在我的Firefox插件上按CTRL+SPACE时,我试图获得焦点元素

为此,我想使用document.activeElement来获取焦点元素,但它不起作用。它总是返回一个xulement

此加载项中只有两个文件:

Lib/main.js

var self = require ("sdk/self");

var workers = require("sdk/content/worker");
let worker =  workers.Worker({
                window: require("sdk/window/utils").getMostRecentBrowserWindow(),
                contentScriptFile: self.data.url("script.js")
              });


var { Hotkey } = require("sdk/hotkeys");
var showHotKey = Hotkey({
  combo: "control-space",
  onPress: function() {
        worker.port.emit ("getFocused", "");
  }
});
以及文件Data/script.js

self.port.on ('getFocused', function (msg){
    var campo = document.activeElement;
    alert (campo);
});
(在这里您可以看到:)

有人能帮我吗

是否可以从XuleElement获取输入文本或textarea并更改其文本

多谢各位

------------------------编辑----------------------

我不知道它是否有用,但是,当url文本区域(我们在其中写入站点地址)具有焦点时,它会返回一个


[object HTMLInputElement]

getMostRecentBrowserWindow
返回一个ChromeWidow对象。所以activeElement`是XUL元素是正常的

你应该做的是

window: require("sdk/window/utils").getMostRecentBrowserWindow().gBrowser.contentWindow

好的,很好。我会测试一下,然后回来给你反馈。谢谢。是的!!!它起作用了!非常感谢!但我不明白为什么它会起作用。。。你能给我一些解释或链接吗?再次感谢你!您的目标是包含网页HTMLDocument的窗口
getMostRecentBrowserWindow
返回包含Firefox根XULDocument的窗口(如果有多个窗口,则返回前面的窗口)。gBrowser属性包含对
tabbrowser
元素的引用。并且
contentWindow
保存对所选选项卡窗口的引用(唯一可以接受用户输入的窗口)。如果你想更加安全,你应该检查这个窗口的文档是否是一个HTMLDocument,并可能检查URl方案(关于:home是一个HTMLDocument,但你可能想跳过它)。只需注意:
require(“sdk/window/utils”).getMostRecentBrowserWindow()。内容较短,与Firefox不太一样(将
window.content
变量自动设置为主XUL框架内的窗口)。