【问题标题】:document.activeElement returning a XULElementdocument.activeElement 返回一个 XULElement
【发布时间】:2013-10-23 17:24:13
【问题描述】:

当用户在我的 Firefox 插件上按 CTRL + SPACE 时,我正在尝试获取焦点元素。

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

我在这个插件中只有两个文件:

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);
});

(如何在这里看到:Add-on SDK Builder Test Project)

那么,有人可以帮我吗?

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

非常感谢!

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

我不知道它是否有帮助,但是,当 url 文本区域(我们写网站地址的地方)获得焦点时,它会返回一个

[对象 HTMLInputElement]

【问题讨论】:

    标签: javascript firefox-addon xul firefox-addon-sdk


    【解决方案1】:

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

    你应该做的是

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

    【讨论】:

    • 好的,很好。我会对其进行测试并返回这里给您反馈。谢谢。
    • 是啊!!!有用!非常非常感谢你!但我不明白为什么它会起作用......你能给我一些解释或一些链接吗?再次感谢您!
    • 您的目标是包含网页的 HTMLDocument 的窗口。 getMostRecentBrowserWindow 返回包含 Firefox 的根 XULDocument 的(在许多情况下是前面的)窗口。 gBrowser 属性包含对tabbrowser 元素的引用。 contentWindow 持有对所选选项卡窗口的引用(唯一可以接受用户输入的选项卡)。如果你想更加安全,你应该检查这个窗口的文档是否真的是一个 HTMLDocument 并且可能还要检查 URl 方案(about:home 是一个 HTMLDocument 但你可能想跳过它)。
    • 请注意:require("sdk/window/utils").getMostRecentBrowserWindow().content 更短,不像 Firefox 特定的那样(window.content 变量会自动设置为 XUL 主框架内的窗口)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多