Addon firefox : modifier le document HTML

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour

Je souhaites réaliser un petit addon Firefox qui me paraissais assez simple malgré mon état de débutant en Javascript : créer un menu contextuel qui insère un texte défini dans un textarea.

En me basant sur le HelloWorld proposé sur MDN, j'arrive sans soucis à créer le menu et à le lier à une fonction qui affiche une alerte par exemple, mais lorsque je veux interagir avec mon document html, il semble ne rien se passer.

Je passe les manifest et autre, tout s'installe bien :)

Je met le fichier XUL si ça peut aider, mais ma commande semble bien appellée, peut-être pas de la bonne façon ceci-dit

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?xml version="1.0"?>

<?xml-stylesheet type="text/css" href="chrome://global/skin/" ?>
<?xml-stylesheet type="text/css"
  href="chrome://chocoDF/skin/browserOverlay.css" ?>

<!DOCTYPE overlay SYSTEM
  "chrome://chocodf/locale/browserOverlay.dtd">

<overlay id="chocoDF-browser-overlay"
  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

  <script type="application/x-javascript"
    src="chrome://chocodf/content/browserOverlay.js" />


<popup id="contentAreaContextMenu">
  <menuseparator/>
  <menu id="chocoDF" label="chocoDF">
    <menupopup id="chocoDF" label="chocoDF">
      <menuitem insertafter="Properties" label="Infodistri" oncommand="chocoDFChrome.BrowserOverlay.cmd_infodistri(event);" />    
    </menupopup>
  </menu>
</popup>
</overlay>

Le code suivant m'affiche une boite de dialogue avec null alors que je suis certain qu'un textarea avec l'Id brandLogo existe sur ma page de test. Je m'attendrais donc à voir [object HTMLInputElement] dans la boite et pas null.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
if ("undefined" == typeof(chocoDFChrome)) {
  var chocoDFChrome = {};
};

/**
 * Controls the browser overlay for the Hello World extension.
 */
chocoDFChrome.BrowserOverlay = {
  /**
   * Says 'Hello' to the user.
   */
  cmd_infodistri : function(aEvent) {
        window.alert(document.getElementById("req_message"));
  }
};

Que manque-t-il dans mon code pour que j'arrive à récupérer un élément du document HTML ?

+0 -0
Auteur du sujet

Bon, je me répond à moi même :)

Il faut passer le contenu du document en paramètre à la fonction comme cela

Ligne 21 du fichier XUL

1
      <menuitem insertafter="Properties" label="Infodistri" oncommand="chocoDFChrome.BrowserOverlay.cmd_infodistri(event,window.content);" />

à la place de

1
      <menuitem insertafter="Properties" label="Infodistri" oncommand="chocoDFChrome.BrowserOverlay.cmd_infodistri(event);" />

Et on récupère le contenu dans la déclaration de la fonction (ligne 12) :)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
if ("undefined" == typeof(chocoDFChrome)) {
  var chocoDFChrome = {};
};

/**
 * Controls the browser overlay for the Hello World extension.
 */
chocoDFChrome.BrowserOverlay = {
  /**
   * Says 'Hello' to the user.
   */
  cmd_infodistri : function(aEvent,win) {
        window.alert(win.document.getElementById("req_message"));
  }

};
+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte