Envoyé par : aurelien
Date : 23/05/2005 18:53
Bonjour,
J'essaie de faire ma première extension firefox.
Le but de cette extension est de créer des raccourcis entre une page web ou l'on a copié du texte et une page web ou l'on a collé le texte.
Je n'en suis qu'au début et j'essaie pour l'instant de savoir quand un appel à copier a été fait.
Le problème est que tous les exemples que je trouve sur le web utilise une commande définie dans un fichier xul. La commande 'cmd_copy' qui m'intéresse est propre à firefox (je ne suis meme pas sur de pouvoir y accéder).
J'ai essayé de faire quelque chose qui ressemble à ça :
init(); function init() { addEventListener("cmd_copy", testcopy, true); } function testcopy(event) { alert('copy'); }
Mais je ne sais pas quel élément utiliser pour lui ajouter le listener. Quand je l'ajoute à document ça ne fait rien.
J'ai aussi essayé d'utiliser des controllers en suivant la partie 7.8 du tutorial mais sans grands résultats.
Si quelqu'un peut me pointer vers un exemple, vers une extension qui fait quelque chose de similaire (j'ai regardé clipboard observer qui ouvre un nouvel onglet quand on copie un lien dans le presse papier mais elle se contente de regarder le clipboard toute les 500 ms). Ou me dire si 'cmd_copy' est capturé est n'est pas accessible depuis une extension. Je lui en serais reconnaissant.
Envoyé par : Lapinator
Date : 23/05/2005 21:14
bon vite fait ( mal fait ), pour pouvoir utiliser "addEventListener" il faut un objet DOM ou l'on rajoute l'event dessus
ex : dans l'app
<label id="mon_label" value="bla bla" />
dans le javascipt
document.getElementById('mon_label').addEventListener("cmd_copy", testcopy, true);
A noté aussi que je ne connait pas l'événement 'cmd_copy', je doute qu'il existe.
Envoyé par : aurelien
Date : 24/05/2005 11:26
Merci de cette piste, pour préciser :
On retrouve la commande 'cmd_copy' à plusieurs endroits dans le code de firefox, notamment dans browser.xul :
<command id="cmd_copy" oncommand="goDoCommand('cmd_copy')" disabled="true"/>
<menuitem id="context-copy" label="©Cmd.label;" accesskey="©Cmd.accesskey;" command="cmd_copy"/>
<menuitem label="©Cmd.label;" key="key_copy" accesskey="©Cmd.accesskey;" command="cmd_copy"/>
<toolbarbutton id="copy-button" class="toolbarbutton-1 chromeclass-toolbar-additional" label="©Cmd.label;" command="cmd_copy" tooltiptext="©Button.tooltip;"/>
Il y a donc plusieurs éléments qui utilisent la même commande. Je ne voudrais pas ajouter un listener pour chaque élèment mais faire quelque chose de plus général (de toute façon j'ai aussi tenté le document.getElementById('context-copy')... et rien ne se passe)
helloworldOverlay_init();
function helloworldOverlay_init() { document.getElementById('context-copy').addEventListener("cmd_copy", testcopy, true); hello(); }
function testcopy(event) { alert('copy'); }
function hello() { alert("Hello"); }
Le code ci-dessus packagé dans une extension ne provoque rien quand je fait un copier depuis le menu contextuel (j'ai aussi tenté avec le bouton copy qu'on peut rajouter dans la toolbar sans résultat), alors que j'ai bien un hello quand j'ouvre une nouvelle fenêtre).
Et la console javascript ne m'indique aucune erreur ou warning alors que j'ai mis javascript.options.showInConsole
et javascript.options.strict
à true
Pour finir une question qui n'a rien a voir : le code de firefox correspond il à la branche aviary (si ce n'est pas le cas à quoi correspond aviary) ou à la partie browser de mozilla ?
Envoyé par : laurentj
Date : 24/05/2005 12:47
tu ne dois pas ajouter ton listener sur un item de menu. Ça ne rime à rien. C'est la commande que tu dois modifier, afin que tous les élements de l'interface qui appellent cette commande fasse la même chose.
De plus, cmd_copy n'est pas le nom d'un évènement, mais un identifiant de commande. Or addEventListener attend un nom d'évenement (tout ce qui correspond aux attributs on* : select, click, command, focus etc..).
je pense que la solution se trouve plutôt dans un overlay qui modifie la balise command cible, par exemple :
<command id="cmd_copy" oncommand="testCopy();goDoCommand('cmd_copy')" />
le code de firefox correspond il à la branche aviary
oui. Mais il est aussi dans une certaine mesure dans le tronc. Le code propre à firefox se trouve dans le repertoire browser/. La branche seamonkey, c'est la suite Mozilla. le repertoire mail/ c'est le code propre à Thunderbird, mailnews/ ce qui est commun à Thunderbird et Mozilla Mail etc..
Envoyé par : aurelien
Date : 24/05/2005 14:41
Merci beaucoup, effectivement ca marche.
Je me suis compliqué la vie pour rien, vu comme ça c'est super simple.
Il n'est plus possible de poster des messages dans ce forum.
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.