Firefox addon 按钮的Firefox插件SDK onMouseover事件

Firefox addon 按钮的Firefox插件SDK onMouseover事件,firefox-addon,firefox-addon-sdk,xul,Firefox Addon,Firefox Addon Sdk,Xul,随着多进程Firefox的到来,我决定修改我的插件。它是一个基于XUL构建的工具栏插件。现在我想使用插件SDK构建它 旧的XUL覆盖允许按钮的onMouseOver事件。但是新的插件SDK只有一个用于单击的侦听器 如何为工具栏按钮获取onMouseOver(悬停)事件 也许有什么方法可以将css(:hover)添加到button元素 ,我正在努力把它整理好,但也许有更好的方法 以下是我到目前为止的情况: var {Cu, Cc, Ci} = require("chrome"); Cu.impor

随着多进程Firefox的到来,我决定修改我的插件。它是一个基于XUL构建的工具栏插件。现在我想使用插件SDK构建它

旧的XUL覆盖允许按钮的
onMouseOver
事件。但是新的插件SDK只有一个用于
单击的侦听器

如何为工具栏按钮获取onMouseOver(悬停)事件

也许有什么方法可以将css(:hover)添加到button元素

,我正在努力把它整理好,但也许有更好的方法

以下是我到目前为止的情况:

var {Cu, Cc, Ci} = require("chrome");
Cu.import('resource://gre/modules/Services.jsm');

 var aDOMWindow = Services.wm.getMostRecentWindow('navigator:browser');
 aDOMWindow.addEventListener('mouseover', onSpatMouseover, true);

 function onMyMouseover(event){
    if (event.target.nodeName == 'toolbarbutton'){
        console.log(event.explicitOriginalTarget.nodeName);
        if(event.currentTarget.nodeName == '#MyButton'){
             console.log("found the button");
        }
    }
 }

但是它还没有找到
#MyButton

首先,您已经收到的错误消息告诉您如何使其工作


但它并不一定是您所需要的,通常通过它的3种方法之一提供对底层XUL元素的访问。

下面是一个完整的示例,说明如何做到这一点。实际上有两个函数,一个用于mouseover,另一个用于mouseout。如果您使用mouseover更改按钮的图标,则需要mouseout将其更改回正常状态

const { browserWindows } = require("sdk/windows");
const { CustomizableUI } = require('resource:///modules/CustomizableUI.jsm');
const { viewFor } = require("sdk/view/core");
const { ActionButton } = require("sdk/ui/button/action");

var myButton = ActionButton({
    id: "mybutton",
    label: "My Button",
    icon: { "16": "./icon-16.png", "32":"./icon-32.png", "64": "./icon-64.png" },
    onClick: function(state) {
        console.log("My Button was clicked");
    }  
});


//create a mouseover effect for a control
exports.MouseOver = (whatbutton, whatwindow, whatfunction) =>{
    CustomizableUI.getWidget( viewFor(whatbutton).id ).forWindow(whatwindow).node.addEventListener('mouseover', whatfunction, true);
};
exports.MouseOut = (whatbutton, whatwindow, whatfunction) =>{
    CustomizableUI.getWidget( viewFor(whatbutton).id ).forWindow(whatwindow).node.addEventListener('mouseout', whatfunction, true);
};    


function myMouseOverFunction(){
  console.log("mousing over...");
}
function myMouseOutFunction(){
  console.log("mousing out...");
}



//add events to the browser window
for(let w of browserWindows){
    exports.MouseOver(mybutton, viewFor(w), myMouseOverFunction);   
    exports.MouseOut(mybutton, viewFor(w), onMouseOutFunction );    
}

事实上,我想我已经解决了这个问题;我正在努力改进悬停,因为现在它能捕捉所有元素。。。所以我要删除我的错误消息;但问题依然存在。我不知道如何处理你为我链接的片段。你能详细说明一下吗?它类似于,你必须根据你的按钮来调整它哈-我过去能够在XUL元素上直接调用“onMouseover”。这被编码为比你在编写UI时应该努力的资源密集度要高得多。它阻止在整个窗口中的每个
mouseover
事件上被调用,而不仅仅是感兴趣的单个UI元素的
mouseover
事件。虽然这可能更容易编写代码,但通常是选择这样做(由多人和/或多种方式)会导致用户界面变得笨拙和无响应。事件应该设置为调用代码所需的最少次数,并执行功能性/响应性所需的最少次数。是的,我很清楚这一点。我不想使用这个代码;到目前为止我只想到了这些,所以我有个问题。我把它挂起来是为了让大家知道我真的试过了。