Créer un greffon de recherche pour firefox et IE7

L'écriture de greffon de recherche compatible avec toutes les versions de mozilla firefox et microsoft internet explorer 7 est une chose facile si l'ont suit bien la méthode.

Il faut d'abord comprendre que firefox utilise deux formats différents suivant les versions. Les versions les plus anciennes (< 2) utilisent le format Sherlok d'Apple (http://fr.wikipedia.org/wiki/Sherlock_%28logiciel%29).

A partir de la version 2 de firefox et sur IE7, OpenSearch est utilisé (http://fr.wikipedia.org/wiki/OpenSearch).

Dans la suite du billet, vous aurez a remplacer les mots suivants :

  • TITRE : titre du site ;
  • DESCRIPTION : description rapide ;
  • URLSEARCH : l'url de recherche ;
  • URLSRC : adresse du fichier src ;
  • URLXML : adresse du fichier xml ;
  • URLICO : l'url de l'icône (16×16) ;
  • ICOBASE64 : l'icône précédent en base64 (en utilisant par exemple l'interface web libre http://www.sveinbjorn.org/dataurlmaker).

La variable contenant le mot à recherche est "word".

Création d'un fichier .src pour les versions anciennes de firefox :

<search
       version="7.1"
       name="TITRE"
       description="DESCRIPTION"
       action="URLSEARCH"
       searchform="URLSEARCH"
       method="GET"
       queryCharset="utf-8"
>
       <input name="sourceid" value="Mozilla-search">
       <input name="word" user>
</search>
<browser
       update='URLSRC'
       updateIcon='URLICO"
       updateCheckDays="7"
>

Il est a noté que j'utilise la méthode "GET" (la variable est transmise dans l'URL) et non "POST" parce que IE7 ne le gère pas.

Voici le fichier OpenSearch équivalent pour firefox 2 et IE7 :

<?xml version="1.0" encoding="UTF-8" ?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
       <ShortName>TITRE</ShortName>
       <Description>DESCRIPTION</Description>
       <InputEncoding>utf-8</InputEncoding>
       <Image width="16" height="16">data:image/x-icon;base64,ICOBASE64==</Image>
       <UpdateInterval>7</UpdateInterval>
       <UpdateUrl>URLXML</UpdateUrl>
       <IconUpdateUrl>URLICO</IconUpdateUrl>
       <Url type="text/html" template="URL?word={searchTerms}" />
       <Url type="application/x-suggestions+json" method="GET" template="URL/autosuggest.php?input={searchTerms}" />
</OpenSearchDescription>

La ligne "<Url type="application/x-suggestions+json"" ne sert que pour firefox. Cette ligne permet de rajouter les suggestions automatiques grâce au script autosuggest.php que nous verrons plus tard.

Une fois les fichiers créés, il faut les proposer à l'installation. Dans les deux cas, il faut passer pour un javascript. Pour IE < 7 et les très anciennes version de mozilla, il sera proposer de mettre un signet/favorie.

Voici la fonction javascript nécessaire :

function addEngine()
{
        if ( typeof window.external == "object" ) {
            try {
                window.external.AddSearchProvider(URLXML");
            } catch (e) {
                window.external.AddFavorite("URL", "TITRE");
            }
        } else if ( (typeof window.sidebar == "object") && (typeof window.sidebar.addSearchEngine == "function") ) {
                window.sidebar.addSearchEngine(
                        "URLSRC",
                        "URLICO", "TITRE", "" );
        } else {
                window.sidebar.addPanel("TITRE", "URL", "");
        }
}

Exemple de lien permettant d'installer : <a href="fichier.src" type="text/smartbookmark" rel="URL?word=%s" title="TITRE">Ajouter à votre navigateur</a>

En ajoutant "text/smartbookmark" et "rel", on va proposer au utilisateur de galeon/epiphany d'ajouter le moteur de recherche en cliquant droit sur le lien et en le mettant en tant que signet

Voici un script (rapide) qui cherche les mots dans une base de donné pour les suggestions de firefox 2 :

<?php
$db = mysql_connect('localhost', 'login', 'password');
mysql_select_db('nom_de_la_base',$db); 
$sql = "SELECT infinitif FROM `verbsfr` WHERE `infinitif` REGEXP \"^" . $_GET['input'];">'input' . "\" LIMIT 0 , 10";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modified
header ("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header ("Pragma: no-cache"); // HTTP/1.0
header("Content-Type: application/json");
echo "[\"" . $_GET['input'] . "\", [";
while ( $row = mysql_fetch_assoc($req) )
        $arr[]= " \"" . $row['infinitf'] . "\" ";
echo implode(", ", $arr);
mysql_close(); 
echo "] ]";
?>

Il est possible de proposer l'installation directement dans la zone de recherche, en rajoutant l'entête suivant dans les pages du site :

<link title="TITRE" type="application/opensearchdescription+xml" rel="search" href="URLXML">

Pour tester cela, voir http://sensmotdire.gnunux.info/add_browser.php

Haut de page