Meilleure façon d'écrire une extension Safari 4 [fermé]
Question
Quelle est la meilleure façon d’écrire une extension Safari ?J'ai écrit quelques extensions XUL pour Firefox et j'aimerais maintenant en écrire des versions pour Safari.Existe-t-il un moyen qui vous permettrait d'ajouter des boutons ou des formulaires à l'interface utilisateur du navigateur, car cela n'est pas possible avec un gestionnaire de saisie ou un menu Service ?
La solution
Avec la sortie de Safari 5.0, Apple a publié un nouveau cadre d'extension que les développeurs peuvent utiliser.Dans les fonctionnalités, il ressemble au framework d'extension Firefox permettant de personnaliser les boutons, les barres d'outils, les menus contextuels, les injections à l'aide de javascript et html 5.
Plus sur ce lien
Autres conseils
Le développement du plugin Safari n’est pas trivial.L'interface est écrite en Objective-C, et la majeure partie ne fait même pas partie de WebKit (vous ne pouvez donc pas voir la source), mais il existe un mécanisme pour inspecter et corriger la hiérarchie d'objets d'une application en cours d'exécution.Cela nécessite une compréhension de Cocoa et d'Objective-C, mais pas moins.
Voici un aperçu de haut niveau que j'avais dans mes favoris du processus http://livingcode.org/2006/tab-dumping-in-safari.Il passe en revue la création de plugins Safari en utilisant Python avec du code fonctionnel (probablement obsolète).Au lieu de Python, vous pouvez utiliser tout ce qui a des liaisons Objective-C.
Il comporte deux parties principales :
Vous devez joindre votre code à un Safari en cours d'exécution.Cela se fait généralement avec SIMBL http://www.culater.net/software/SIMBL/SIMBL.php.
Une fois à l’intérieur, vous devez déterminer quoi corriger.Il existe un tutoriel sur l'inversion des applications Cocoa http://www.culater.net/wiki/moin.cgi/CocoaReverseEngineering, qui renvoie à l'outil le plus important, class-dump http://www.codethecode.com/projects/class-dump/ (le lien sur wiki est cassé).Class-dump vous donne une hiérarchie complète des classes de Safari, où vous pouvez deviner par leurs noms ce que vous devez spécifiquement corriger.Il s’agit d’un mode très d’essais et d’erreurs.
La lecture des liens ci-dessus vous donnera la portée du projet.
Les choses ont changé récemment.Apple dispose désormais d'une API d'extensions disponible dans le cadre de Safari 5.Vous pouvez en savoir plus sur Le site d'Apple et par rejoindre le programme pour développeurs Safari.
Les extensions de Safari doivent être signées numériquement, mais vous pouvez obtenir le certificat de signature gratuitement auprès d'Apple.C'est le moyen légitime d'intégrer votre extension dans Safari sans recourir à des hacks qui risquent de se briser à chaque fois qu'Apple met à jour Safari.
Personne ne semble même avoir mentionné le fait que Safari prend en charge de vrais plugins, ce qui n'est certainement pas le cas des hacks du gestionnaire d'entrée.
"Sujets de programmation du plug-in WebKit" http://developer.apple.com/documentation/InternetWeb/Conceptual/WebKit_PluginProgTopic/
C'est ainsi que des éléments tels que la prise en charge du contenu PDF et Flash sont implémentés.Jetez un oeil à l'intérieur de votre /Library/Internet Plug-ins/
répertoire pour voir des exemples.
Bien sûr, il existe des limites inhérentes et vous ne pourrez peut-être pas accomplir ce que vous espérez en matière de modification de l'interface utilisateur.Les plug-ins Safari ne peuvent pas faire tout ce que les hacks d'Input Manager peuvent faire, mais ils fonctionneront dans WebKit n'importe où et dans les futures versions du système d'exploitation. Note: Safari est en 64 bits par défaut sur Snow Leopard, donc aucun gestionnaire d'entrée ne fonctionne.il me manque Safari AdBlock déjà...:-( J'adorerais le voir réécrit en tant que plugin authentique.
Existe-t-il un moyen qui vous permettrait d'ajouter des boutons ou des formulaires à l'interface utilisateur du navigateur, car cela n'est pas possible avec un gestionnaire de saisie ou un menu Service ?
En fait, avec un InputManager, il serait être possible.SIMBL, la technique courante pour les extensions Safari, est simplement un wrapper autour d'InputManagers — il signifie Smarché jenentrée Mgestionnaire Bdérouler Lchargeur.Vous pouvez ajouter des éléments à la barre de menus, à la barre d'outils, aux boîtes de dialogue, n'importe où, simplement en étendant les classes existantes de Safari.
Cela dit, écrire des extensions pour Safari n’est pas seulement non trivial, comme l’a dit æon, mais aussi totalement non pris en charge.Il en existe des extensions relativement populaires, comme Inquisitor (récemment acquis par Yahoo!) et Gears de Google, mais pour la plupart, elles sont très différentes des extensions de Firefox, qui sont une technique largement utilisée et officiellement prise en charge.
Vous voulez aussi certainement prendre en considération les particularités limitations des InputManagers sur Leopard.
À noter également : Apple a déclaré que les InputManagers sont sévèrement limités à partir de Leopard et ne fonctionneront pas dans les applications 64 bits d'Apple. Notes de version de Léopard.Ceci est particulièrement intéressant étant donné que la plupart des applications seront en 64 bits dans Snow Leopard (y compris probablement Safari).Apple essaie définitivement d'effacer InputManager en tant que vecteur permettant de remplacer et d'étendre les fonctionnalités.Safari a désespérément besoin d'un mécanisme d'extension.
Les extensions Safari n'ont PAS besoin d'être approuvées par Apple.Vous disposez simplement d'un certificat de développeur (gratuit) pour les créer, mais vous pouvez les transmettre et bien qu'Apple crée la galerie d'extensions, vous n'êtes pas obligé de la distribuer par là.Comme vous pouvez le constater, il existe déjà de nombreuses extensions que vous pouvez essayer aujourd'hui.Le certificat garantit simplement qu'il n'a pas été falsifié.
Si vous souhaitez examiner une extension existante pour voir comment cela se fait, téléchargez-la ou récupérez-la dans votre dossier d'extensions Safari, puis remplacez le .safariextz par .xar, puis ouvrez/extrayez avec Pacifist pour afficher le code et si vous souhaitez l'ajouter à l'application Extension Builder.