XPCOM et protocol-handler

Vous vous penchez sur le développement d'applications ou d'extensions pour Mozilla ? C'est alors vers ce forum que se dirigeront naturellement vos requêtes...
Répondre
olivier2831
Arias
Messages : 4
Inscription : 09 sept. 2008, 08:04

XPCOM et protocol-handler

Message par olivier2831 »

Bonjour,

J'ai développé un code Javascript qui ajoute à la volée des URL (de type "myapp:monparamètre") à des pages HTML dès qu'il reconnait une expression régulière.
En cliquant sur ces liens, je souhaite communiquer la valeur contenue dans l'URL à une application locale qui écoute sur un socket serveur, .

Aujourd'hui, avec Firefox sous Windows, j'utilise un external protocol handler qui lance une application.
Mon problème est sous Windows, que cette manip impose l'utilisation d'une commande shell, ce qui fait apparaitre une fenetre de commande et me demande d'éditer au préalable la base de registre.

J'ai lu XPCOM intègre des fonctions qui manipulent les sockets.

Est-il possible de développer un protocol-handler en XPCOM ?
Celui-ci n'aurait qu'à :
- décomposer une chaîne de type "myapp:monparamètre"
- ouvrir un socket client sur un port connu à l'avance,
- copier cette valeur "monparamètre"
- fermer le socket client

Slts


Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.16) Gecko/20080715 Ubuntu/7.10 (gutsy) Firefox/2.0.0.16
Avatar de l’utilisateur
jpj
Animal mythique
Messages : 25260
Inscription : 01 août 2005, 15:38

Message par jpj »

Bonjour,

Je déplace dans "Développement web" et espérant que ce soit la section la plus adaptée.
► Si votre problème est [Résolu], svp, marquez-le.
► Pas de support par mp, l’aide se fait sur le forum.
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Message par calimo »

jpj a écrit :Bonjour,

Je déplace dans "Développement web" et espérant que ce soit la section la plus adaptée.
Je pense que "Développement d'applications Gecko" aurait été mieux, car je ne pense pas qu'on puisse ajouter des protocoles depuis une page web : c'est typiquement une extension.
olivier2831
Arias
Messages : 4
Inscription : 09 sept. 2008, 08:04

Message par olivier2831 »

'en profite pour affiner ma question :

Sous Linux, en valorisant la préférence network.protocol-handler.app.(foo) (et les valeurs associées que sont network.protocol-handler.external.(foo) et network.protocol-handler.warn-external.(foo)) avec le chemin vers un fichier shell exécutable, j'arrive à lancer le shell exécutable dès que le navigatur rencontre un lien de type (foo):paramètre (analogue à mailto:Bob@exemple.com)

Quand je déplace ce shell exécutable dans le répertoire content d'une extension et utilise une URL chrome pour le désigner (chrome://monextension/content/foo.sh), la réponse laconique est "... le protocole (foo) n'est associé à aucun programme".

Dois-je en conclure que les nouveaux protocoles ne peuvent pas être matérialisés par une ressource Chrome (j'en doute) ?

Doit-on utiliser un autre mécanisme que les protocol-handlers pour ajouter à Firefox un protocole implémenté sous la forme d'un module XPCOM ?

Slts

Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.16) Gecko/20080715 Ubuntu/7.10 (gutsy) Firefox/2.0.0.16
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Message par calimo »

As-tu lu http://kb.mozillazine.org/Dev_:_Extendi ... e_Protocol ? Il semblerait qu'ils montrent des exemples pour chrome (et xchrome ? :shock: :?: )
olivier2831
Arias
Messages : 4
Inscription : 09 sept. 2008, 08:04

Message par olivier2831 »

Non je ne l'avais pas lu et ça a l'air très intéressant !
Merci beaucoup pour ce tuyau.

Si ma compréhension est bonne, il faut étendre le protocole chrome (en enregistrant une extension) pour qu'un protocol-handlr, par exemple, puisse l'utiliser.

Est-ce que réciproquement, on peut dire qu'un protocol-handler, non nativement supporté par Firefox, est obligatoirement référencé par un paramètre de type network.protocol-handler.external.(protocol non natif) ?

Si oui, il me suffirait de m'inspirer de la façon dont il est implémenté pour répondre aux différentes questions que je pourrai me poser.

Si quelqu'un sait me recommender un exemple sous Linux, qu'il n'hésite pas : je vais essayer l'extension Now Playing X qui tourne sur Windows.

Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.16) Gecko/20080715 Ubuntu/7.10 (gutsy) Firefox/2.0.0.16
martin
Varan
Messages : 1074
Inscription : 21 janv. 2004, 16:23

Message par martin »

désolé de répondre si tardivement.

Oui tu peux facilement implémenter un nouveau protocole dans un composant XPCOM, par exemple dans une extension.
L'exemple fourni en lien par Calimo est bon, il montre un exemple d'implémentation d'un nouveau protocole, 'xchrome', et le traitement choisi est de rediriger vers le protocole 'chrome'. Mais tu peux faire le traitement que tu souhaites, par exemple invoquer ton programme externe (ce qui est également possible dans un composant).

Tu peux trouver un autre exemple de composant qui implémente un protocole en javascript, dans mon extension Boox (fichier booxProtocol.js dans le dossier components, qui implémente un protocole 'boox').
Et tu peux trouver un exemple pour lancer un programme externe à Firefox dans une autre de mes extensions, Play All.
calimo a écrit :car je ne pense pas qu'on puisse ajouter des protocoles depuis une page web : c'est typiquement une extension.
Depuis Firefox 3, il est possible de gérer des protocoles ;) , çà peut peut-être également t'intéresser.
olivier2831
Arias
Messages : 4
Inscription : 09 sept. 2008, 08:04

Message par olivier2831 »

Je ne pense pas que ta réponse soit tardive et en tout cas, je la trouve extrèmement intéressante, notamment sur les web-based protocols ;-)

Je dois terminer mon appli ce WE et ces infos vont me faire gagner un temps précieux.

Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.16) Gecko/20080715 Ubuntu/7.10 (gutsy) Firefox/2.0.0.16
Invité

Message par Invité »

J'abuse mais personne n'a développé un protocole comme tcp: ou netcat: ?

J'ai vu qu'il existait dans Necko le support des sockets (évidemment) mais avoir ce support sous forme de protocole serait pratique dans mon cas (surtout, ça m'éviterait d'apprendre XPCOM et ses subtilités).

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.16) Gecko/20080702 Firefox/2.0.0.16
Invité

Message par Invité »

J'ai suivi attentivement http://kb.mozillazine.org/Dev_:_Extendi ... e_Protocol

C'est tout bête mais je suis bloqué sur l'installation du script "Firefox ne sait pas ouvrir cette adresse car (xchrome) n'est associé à aucun programme".

Ce qui aurait été sympa, c'est d'avoir la procédure complète qui permette d'abord d'installer et d'utiliser le nouveau protocole puis ensuite d'y appliquer quelques re-factorisation comme :
- lui changer son nom,
- ajouter un paramètre au protocole,
- déplacer les fichiers,
- documenter,
- observer l'influence des privilèges sur le comportement,
- ...

Toutefois, je ne désespère pas y arriver autrement.

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.16) Gecko/20080702 Firefox/2.0.0.16
martin
Varan
Messages : 1074
Inscription : 21 janv. 2004, 16:23

Message par martin »

Anonymous a écrit : C'est tout bête mais je suis bloqué sur l'installation du script "Firefox ne sait pas ouvrir cette adresse car (xchrome) n'est associé à aucun programme".
C'est donc que ton composant n'est pas enregistré, ou erroné.

D'abord vois aussi ce lien, il y a un peu plus de factorisation comme tu le souhaites :
http://www.nexgenmedia.net/docs/protocol/
C'est un peu vieux, mais çà doit encore être juste.

Ensuite le plus simple, c'est que tu passes par une extension. Firefox éteint, tu te crées ton extension dans le dossier 'extensions' de ton profil, avec toute l'arborescence qui va bien et les fichiers install.rdf et chrome.manifest. Et tu crées ton composant dans le dossier 'components' de ton extension.
Chaques fois que tu crées un nouveau composant dans ce dossier, tu dois effacer (Firefox arrêté !!) les fichiers compreg.dat et xpti.dat de ton profil, pour que les composants soient réenregistrés correctement.
Et chaque fois que tu modifies un composant, tu dois relancer Firefox pour que les changements soient pris en compte (cà peut être un peu pénible).

Cà devrait être plus pratique pour développer ton composant.
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 15 invités