Les extensions sur Safari Mac OS X et Windows

Depuis quelques temps, Safari a sorti une API qui permet de faire des extensions. Les extensions sont  officiellement disponibles depuis Safari 5.0, à travers une API Javascript, qui se comporte à peu près comme l’API des extensions pour Chrome. Une nouvelle couche (principalement d’évènements) a été ajoutée à cette API depuis Safari 5.1, et ça, ça change tout ! En effet, on peut désormais catcher les évènements qui concernent les chargements des pages. Ca peut paraître anodin, mais dans le cas de certaines extensions, c’est vital !

Malheureusement, ce système d’extension est beaucoup moins permissif que l’ancien système… enfin quand je dis ancien système, je parle d’une méthode barbare consistant à charger son code et à redéfinir différentes fonctions de l’exécutable Safari… autant dire énormément de reverse engeneering à faire pour un module non portable et qui risque de ne plus marcher avec les versions suivantes, voire de faire planter complètement Safari !

Aperçu des possibilités

Les principales fonctionnalités sont là :

  • faire un bouton dans la barre d’outils (mais pas en couleur, juste en noir et blanc… merci Apple…) ;
  • exécuter des scripts dans une page, au chargement ou à la demande ;
  • faire des menus personnalisés (selon un certain standard : icone, texte, action/sous-menu) ;
  • et surtout, faire une barre d’outils en HTML (certes, il n’est possible d’utiliser que la hauteur de la barre, donc il est impossible de faire des menus, mais c’est déjà bien !)

La completion automatique de l’API

Le gros problème lorsque l’on utilise ce genre d’API, c’est que la completion automatique dans les éditeurs est rarement au rendez-vous.

J’ai donc généré un fichier Javascript qui décrit la variable globale safari, en utilisant JSDoc.

Cliquez ici pour télécharger le fichier javascript (v5.1), pour l’ajouter ensuite à votre éditeur.

Plus d’informations sur les extensions Safari

Vous trouverez plus d’informations sur les extensions Safari sur le site dédié aux développeurs Apple, avec principalement deux documents réellement complémentaires :

Leave a Reply