Page 1 sur 1

Click Event sur le bouton + des tabs

Publié : 24 mars 2011, 23:05
par eMerzh
Hello,

Je cherche à faire une première extension pour firefox.
Pour commencer simple, je voudrais que lorsque je click milieu sur le bouton + (add tab) de la barre d'outil des tab j'ouvre l'url contenue dans le presse papier.

En m'inspirant d'autre ext, j'arrive à faire ce que je veux en créant un nouveau bouton.
J'arrive aussi à désactiver la création de tab mais c'est partout (menu + bouton + raccourci +...)
en chipotant avec

Code : Tout sélectionner

    gBrowser.removeEventListener("NewTab", BrowserOpenTab, false);

     window.BrowserOpenTab = newtabhomepage.opentab;
ou avec

Code : Tout sélectionner

<commandset id="mainCommandSet">
			<command id="cmd_newNavigatorTab" oncommand="newtabhomepage.opentab(12);"/>
		</commandset>
seulement j'arrive pas à capter l'évènement uniquement sur le + de la barre d'onglet.

kkun à une piste ou pourrait m'aider?

Merci beaucoup

Re: Click Event sur le bouton + des tabs

Publié : 25 mars 2011, 10:05
par Pastisman
Bonjour,

Je ne comprends pas tout de ce que tu fais. Pourquoi ne pas laisser le bouton tel qu'il est et simplement ajouter, dans la propriété "oncommand" du bouton un appel à ta fonction derrière :

Code : Tout sélectionner

document.getElementById("new-tab-button").setAttribute("oncommand","BrowserOpenTab();MaFonction(event);");
et dans la fonction tu testes simplement si l'évènement est un clic milieu, si c'est le cas, tu charges la page dont l'adresse est dans le presse-papier dans le dernier onglet ouvert.

Re: Click Event sur le bouton + des tabs

Publié : 30 mars 2011, 21:55
par eMerzh
en faite ça n'a pas l'aire de faire effet...

je me rend compte aussi que mon gBrowser.removeEventListener("NewTab", BrowserOpenTab, false); ne fait pas d'effet , mais la ligne d'après fait tout :)


j'ai aussi tenté le document.getElementById("new-tab-button").setAttribute("oncommand",""); mais la bouton agit tjs normalement....

mais merci bcp pr l'aide :)... une autre idée?

Re: Click Event sur le bouton + des tabs

Publié : 01 avr. 2011, 13:26
par Pastisman
Bon, j'ai cherché un peu et en fait le bouton avec l'Id "new-tab-button" n'est pas le bon.
Le bouton "+" pouvant maintenant être déplacé, voir supprimé en personnalisant la barre des onglets, il n'a qu'une classe et pas d'Id.

Le moyen le plus simple et le plus élégant que j'ai trouvé est de surcharger la fonction "checkForMiddleClick" ainsi :

Code : Tout sélectionner

function checkForMiddleClick(node, event) {
  // We should be using the disabled property here instead of the attribute,
  // but some elements that this function is used with don't support it (e.g.
  // menuitem).
  if (node.getAttribute("disabled") == "true")
    return; // Do nothing

  if (event.button == 1) {
    /*ChangeTabButton overlay*/
	if( node.getAttribute("class") == "tabs-newtab-button")
	{
		gBrowser.selectedTab = gBrowser.addTab("http://www.google.com/");
		return;
	}
  /* Execute the node's oncommand or command.
     *
     * XXX: we should use node.oncommand(event) once bug 246720 is fixed.
     */
    var target = node.hasAttribute("oncommand") ? node :
                 node.ownerDocument.getElementById(node.getAttribute("command"));
    var fn = new Function("event", target.getAttribute("oncommand"));
    fn.call(target, event);

    // If the middle-click was on part of a menu, close the menu.
    // (Menus close automatically with left-click but not with middle-click.)
    closeMenus(event.target);
  }
}
si tu veux je me suis empaqueté ça dans une petite extension pour tester, je peux te la mettre sur une dropbox.

Re: Click Event sur le bouton + des tabs

Publié : 04 avr. 2011, 23:58
par eMerzh
Hello, ok ça semble fonctionner comme je veux....

je suis intéressé par ta mini extension pour voir comment surcharger la fonction "proprement" ... j'ai pas fait un long cours sur xul et ffx ...ça se voit :)
enfin sinon je me débrouille :D

Re: Click Event sur le bouton + des tabs

Publié : 05 avr. 2011, 09:29
par Pastisman
En fait de surcharger celle-ci, comme la fonction est courte, j'ai simplement repris la fonction de base et ajouté mon code.
Des fois, en cas de fonction plus compliquée dans laquelle on veut changer une large part, il est à mon sens mieux de rappeler la fonction de base dans sa propre fonction :

Code : Tout sélectionner

old_fct = base_fct ;
base_fct = My_fct ;

function My_fct()
{
  if( toto == titi ) old_fct();
  else
  {
  ...
  }
}
La petite extension : http://dl.free.fr/c7MRr6ydB