XPCOM et protocol-handler
-
- Arias
- Messages : 4
- Inscription : 09 sept. 2008, 08:04
XPCOM et protocol-handler
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
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
Bonjour,
Je déplace dans "Développement web" et espérant que ce soit la section la plus adaptée.
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.
► Pas de support par mp, l’aide se fait sur le forum.
-
- Arias
- Messages : 4
- Inscription : 09 sept. 2008, 08:04
'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
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
As-tu lu http://kb.mozillazine.org/Dev_:_Extendi ... e_Protocol ? Il semblerait qu'ils montrent des exemples pour chrome (et xchrome ? )
-
- Arias
- Messages : 4
- Inscription : 09 sept. 2008, 08:04
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
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
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.
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.
Depuis Firefox 3, il est possible de gérer des protocoles , çà peut peut-être également t'intéresser.calimo a écrit :car je ne pense pas qu'on puisse ajouter des protocoles depuis une page web : c'est typiquement une extension.
-
- Arias
- Messages : 4
- Inscription : 09 sept. 2008, 08:04
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
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
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
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
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
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
C'est donc que ton composant n'est pas enregistré, ou erroné.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".
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.
Qui est en ligne ?
Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 12 invités