首先,你的附加住在一個不同的,更多的特權環境中比在頁面代碼的代碼 - 在不遠的未來,他們會還有兩個不同的過程 - 所以你沒有交流直接訪問該頁面:您必須使用content script。我建議你仔細閱讀鏈接的頁面,因爲它會向你提供他們如何相互溝通。
說的是,我的想法是:當用戶點擊一個按鈕時,將內容腳本附加到當前頁面(如果還沒有的話)。在內容腳本中,聽取點擊事件,並做你的東西。
這裏的例子爲您main.js
const { ActionButton } = require("sdk/ui/button/action");
const { data } = require("sdk/self")
const tabs = require('sdk/tabs');
let button = ActionButton({
id: "fieldResolver",
label: "Field Resolver",
icon: {
"16": "./icon-16.png",
"32": "./icon-32.png",
"64": "./icon-64.png"
},
onClick: handleClick
});
function handleClick() {
// get the current tab
let tab = tabs.activeTab;
// you would probably want to store worker somewhere to be sure
// that you won't attach more than once
let worker = tab.attach({
contentScriptFile: data.url("content.js")
});
}
正如你所看到的,你需要一個contentScriptFile
,即必須是在你的附加組件的數據文件夾。 你content.js
意志的樣子:
function clickHandler (event) {
// do something with the element clicked
console.log(event.target.outerHTML);
}
window.addEventListener("click", clickHandler);
// We want to clean the page if the worker is destroyed
self.port.on("detach", function() {
window.removeEventListener("click", clickHandler);
})
可以卸下工作人員打電話worker.destroy()
隨時隨地。正如我所說的,您可能需要將worker
存儲在某個地方,例如Map,以便只有在沒有任何工作人員的情況下才會附加該腳本。