Forums : XPCom

Aller à la discussion :  Plus récente Plus ancienne

# probleme avec simple exemple xpcom + javascript

Envoyé par : smartiz77

Date : 21/07/2008 03:44

Salut. Je suis novice avec XPCOM et j'ai un petit probleme. J'ai essaye de suivre le tutorial suivant: http://basic.mozillanews.org/mozilla_boo(..) mais seulement la partie pour creer un composant en javascript.

J'ai utilise le sdk "xulrunner-1.9.en-US.win32.sdk.zip" et j'utilise firefox 3

Voici le code de mon interface "nsISimple.idl":

#include "nsISupports.idl"
[scriptable, uuid(ce32e3ff-36f8-425f-94be-d85b26e634ee)]
interface nsISimple : nsISupports
{
  attribute string yourName;
  void write( );
  void change(in string aValue);
};

et le code de mon composant "nsSimple.js":

SimpleComponent.prototype = {
   mName: "a default value",
   get yourName()        { return this.mName; },
   set yourName(aName)   { return this.mName = aName; },
   write: function () { dump("Hello " + this.mName + "\n"); },
   change: function (aValue) { this.mName = aValue; },
   QueryInterface: function (iid) {
     if (!iid.equals(Components.interfaces.nsISimple)
         && !iid.equals(Components.interfaces.nsISupports))
       throw Components.results.NS_ERROR_NO_INTERFACE;
     return this;
   }
}
var Module = {
  firstTime: true,
  registerSelf: function (compMgr, fileSpec, location, type) {
  if (this.firstTime) {
    dump("*** first time registration of Simple JS component\n");
    this.firstTime = false;
    throw Components.results.NS_ERROR_FACTORY_REGISTER_AGAIN;
  }
  dump(" ***** Registering: Simple JS component! ****\n");
  compMgr.registerComponentWithType(this.myCID,
          "My JS Component",
          this.myProgID, fileSpec,
          location, true, true,
          type);
  },
  getClassObject : function (compMgr, cid, iid) {
    if (!cid.equals(this.myCID))
      throw Components.results.NS_ERROR_NO_INTERFACE
    if (!iid.equals(Components.interfaces.nsIFactory))
      throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
    return this.myFactory;
  },
  myCID: Components.ID("{98aa9afd-8b08-415b-91ed-01916a130d16}"),
  myProgID: "@mozilla.org/js_simple_component;1",
  myFactory: {
    createInstance: function (outer, iid) {
      dump("CI: " + iid + "\n");
      if (outer != null)
      if (outer != null)
      return (new SimpleComponent()).QueryInterface(iid);
    }
  },
  canUnload: function(compMgr) {
    dump("****** Unloading: Simple JS component! ****** \n");
    return true;
  }
}; // END Module
function NSGetModule(compMgr, fileSpec) { return Module; }

J'ai compile l'interface en xpt a l'aide de XPIDL, jusque la tout va bien. Puis j'ai copier les fichiers nsISimple.xpt et nsSimple.js dans mon repertoire firefox/components Ensuite j'ai execute regxpcom.exe

Mais c'est la que ca pose probleme, quand je regarde le fichier xpti.dat (dans le dossier de mon profile), mon interface est bien presente:

1221,nsISimple,{ce32e3ff-36f8-425f-94be-d85b26e634ee},2,-1,1

Mais dans le fichier compreg.dat, il n'y a aucune trace de mon composant!

Est-ce que j'ai oublie de faire quelque chose? Est-ce que mon code est mauvais? (peut-etre que les standards ont evolues depuis la creation du tutorial)

Merci

PS: desole pour les accents a cause de mon clavier anglais

# Re: probleme avec simple exemple xpcom + javascript

Envoyé par : smartiz77

Date : 21/07/2008 06:46

C'est bon, en fait je ne sais pas ce qui bloquait, mais j'ai trouve un autre tutorial un peu plus officiel et a jour! http://developer.mozilla.org/en/docs/How(..)

Et maintenant tout marche :)

# Re: probleme avec simple exemple xpcom + javascript

Envoyé par : smartiz77

Date : 21/07/2008 07:05

J'ai encore une petite question. Je suis peut-etre bete mais je croyais possible l'utilisation d'un code java (pas javascript) directement a partir de gecko en utilisant un composant XPCOM ecrit en java... Je me suis trompé n'est-ce pas?

grrr j'ai du mal lire la page : http://developer.mozilla.org/en/docs/JavaXPCOM

En gros je n'ai aucun moyen d'appeler du code java a partir du navigateur firefox?

# Re: probleme avec simple exemple xpcom + javascript

Envoyé par : Paul Rouget

Date : 21/07/2008 08:26

En effet, tu ne peux pas utiliser de code Java via l'instance XPCom de Gecko.

# Re: probleme avec simple exemple xpcom + javascript

Envoyé par : smartiz77

Date : 22/07/2008 07:13

En fait je peux tout simplement utiliser un applet java pour executer mon code java et recuperer le resultat.

Ca fonctionne tres bien en appelant un class file distant (http://myhost/myfile.class). Mais je n'arrive pas a inclure le byte code (class file) a partir de mon extension Firefox 3.

En mettant mon fichier avec les autres fichers de l'extension, ca me met une erreur dans la console javascript:

Security Error: Content at http://www.google.com.au/ may not load or link to chrome://sample/content/MessageApplet.class.

Parce qu'en fait mon extension firefox modifie en live le DOM de la page de google pour y inclure l'applet java.

Meme en ajoutant la ligne suivante a mon fichier chrome.manifest:

content sample chrome/content/ contentaccessible=yes

Quelqu'un sait-il comment je peux faire pour inclure cet applet a partir de mon extension?

# Re: probleme avec simple exemple xpcom + javascript

Envoyé par : Paul Rouget

Date : 22/07/2008 10:23

et via une url file:// ?

# Re: probleme avec simple exemple xpcom + javascript

Envoyé par : smartiz77

Date : 23/07/2008 02:30

merci pour cette idee, cependant cela donne exactement la meme type d'erreur:

Security Error: Content at http://www.google.com.au/ may not load or link to file://sample/content/MessageApplet.class.

# Re: probleme avec simple exemple xpcom + javascript

Envoyé par : snotling

Date : 07/08/2008 23:07

Euh, j'ai tout faux si propose de regarder http://developer.mozilla.org/en/docs/Jav(..) ? :)

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.