Firefox 3 and protocol handlers - Part 2 - ExtApp

Le précédent article s'était arrêté à présenter l'application Web de principe du gestionnaire de protocoles de Firefox 3. L'article que vous êtes en train de lire va lui s'attacher à vous permettre d'utiliser une application externe pour un protocole donné.

Un exemple d'application externe

Je vais présenter ici un petit exemple d'application en Python qui permet d'écrire dans un fichier journal (ou 'log') le contenu de la valeur passée via l'appel du protocole. Dans cet exemple le protocole utilisée est "mycall" (l'idée est de simuler la création d'un softphone appelé par une interface de click-to-call).

    #!/usr/bin/python
#-*- coding: utf-8 -*-

# On importe deux bibliothèques utiles pour la suite
import sys
from datetime import datetime

# On met la date dans une variable pour tracer les résultats
date = datetime.now()

# Ici ça se complique un peu. Comme le gestionnaire de protocole
# de firefox donne en argument l'ensemble de la chaine 'href',
# nous allons enlever la chaine 'mycall:' pour ne conserver que
# la valeur décimale de cette chaine
arg = sys.argv[1][7:]

# On ouvre en écriture le fichier journal
# ('a' pour écrire à la suite)
filout = open('/path/to/log/file/calltest.log','a')

# On écrit la valeur envoyée précédée de la date
filout.write('%d/%d/%d %d:%d - Voici l\\'argument donné : ' % (date.day, 
                                                              date.month,
                                                              date.year,
                                                              date.hour,
                                                              date.minute))
filout.write(arg + '\\n')

# On ferme le fichier
filout.close()

On donne les droits d'exécution à ce script :

    chmod +x /path/to/ext/app/call.py

L'application web

Il est maintenant temps de créer l'interface web de 'click-to-call' sur laquelle figurera le lien vers le protocole 'mycall'. Pour ceux qui ont lu l'article précédent, vous remarquerez que c'est encore plus simple.

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
  <title>Web Protocol Handler Sample - Register</title>
</head>
<body>
  <h3>External protocol handler sample</h3>
  <p>This web page will install an external protocol handler for the <code>mycall:</code> protocol.</p>

  <p>Hey have you seen <a href="mycall:874781">this</a> before?</p>
</body>
</html>

Configurer firefox

Si l'interface web est encore plus simple, il faut toutefois configurer un peu Mozilla Firefox.

About:config

Pour accéder au registre de configuration de Firefox, il faut entrer l'adresse suivante dans la barre d'adresse.

    about:config
  • Ensuite, il faut créer une 'nouvelle' 'valeur booléenne' (via un click droit) qui portera le nom suivant: "network.protocol-handler.expose.mycall" et mettre la valeur à "true". Cette valeur permettra d'autoriser l'utilisation de ce nouveau protocole.
  • Un second couple nom + valeur est à créer afin de pouvoir éviter un avertissement lors de l'utilisation d'une application externe: "network.protocol-handler.warn-external.mycall" qui prendra la valeur "false".

1er essai

Si vous êtes sur un système qui supporte Bash (Linux, Mac OS, BSD...), vous pouvez lancer un 'tail -f' sur le fichier journal afin d'en suivre l'évolution. Cela nécessite tout de même que le fichier existe avant. Si ce n'est pas le cas, il suffit de le créer avec :

    touch /path/to/log/file/calltest.log

On lance la surveillance du fichier :

    tail -f /path/to/log/file/calltest.log

On charge la page HTML qui contient le lien 'href' et on suit le lien. Une fenêtre s'affiche alors, vous permettant de choisir l'application à utiliser. Il suffit de choisir celle que vous avez créé plus haut et de cocher (si vous le souhaitez) 'se souvenir' afin de ne plus avoir à le faire ensuite.

À chaque clic, vous ajoutez normalement une ligne dans le fichier journal avec la valeur passée suite à 'mycall:'. À vous d'être imaginatif pour utiliser cette astuce au mieux.

Vus : 1037
Publié par Creasy : 8