2013-10-23 24 views
0

我試圖在用戶按下我的Firefox插件上的CTRL + SPACE時獲得焦點元素。document.activeElement返回一個XULElement

要做到這一點,我想用document.activeElement來獲得聚焦的元素,但它不工作。它總是返回一個XULElement。

我只有兩個文件,在這個附加:

庫/ 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", ""); 
    } 
}); 

和文件數據/的script.js

self.port.on ('getFocused', function (msg){ 
    var campo = document.activeElement; 
    alert (campo); 
}); 

(你怎麼能看到這裏:Add-on SDK Builder Test Project

那麼,有人可以幫助我嗎?

可以從XULElement中獲取輸入文本或textarea並更改其文本?

非常感謝!

------------------------編輯--------------------- -

我不知道是否有幫助,但是,當URL文本區域(這裏我們寫的網站ADRESS)具有焦點,它返回一個

[對象HTMLInputElement]

回答

2

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

你應該做的是

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

好,美觀大方。我會測試它並回到這裏給你一個反饋。謝謝。 –

+0

是啊!有用!非常非常感謝你!但我不明白它爲什麼有效......你能給我一些解釋或鏈接嗎?再次謝謝你! –

+0

您的目標是包含網頁的HTMLDocument的窗口。 'getMostRecentBrowserWindow'返回包含Firefox的根XULDocument的(前面有很多)窗口。 gBrowser屬性持有對「tabbrowser」元素的引用。而'contentWindow'持有對所選標籤窗口的引用(唯一可以接受用戶輸入的標籤)。如果你想要更安全,你應該檢查這個窗口的文檔是否實際上是一個HTMLDocument,並且可能檢查URl方案(關於:home是一個HTMLDocument,但可能你想跳過它)。 – paa