Posts tagged ‘safari’

Ajout/enlèvement d’évènements sur des objets

En javascript, on peut aisément rajouter des évènements sur des objects en utilisant la méthode addEventListener et en supprimer avec removeEventListener.

Exemple : cliquez-moi

  1.  

Pour enlever l’évènement, il suffit d’appeler removeEventListener sur le même objet avec le même deuxième argument.

Les fonctions anonymes

Les fonctions anonymes vous evitent de déclarer une fonction dans votre scope : vous ne la déclarez que quand vous en avez besoin.

Exemple : cliquez-moi

Mais impossible de supprimer l’évènement, car si vous appelez removeEventListener avec le même code, l’interprêteur Javascript va créer un deuxième objet fonction effectuant le même code, à la volée.

  1.  

Les fonctions anonymes nommées

Pour résoudre ce problème, il suffit de nommer la fonction anonyme.

Exemple : cliquez-moi

  1.  

Compatibilités avec les navigateurs

Et qui n’est pas compatible ? IE8 et les versions précédentes ! Donc ceci est surtout un memo pour le développement d’extensions avec Firefox, Safari et Chrome, et est très utile si (par hasard) vous écrivez un bootstrapped add-on.

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 :

A la suite de cet article sur les cookies en navigation privée sous Chrome, Firefox et Internet Explorer, je me suis penché sur le cas Safari. La version que j’ai utilisée est Safari 5.0.1 pour Windows (avec wine 😉 ).

1ère différence : des paramètres par défaut plus restrictifs

Par défaut, Safari n’autorise que les coookies « des sites que je visite ». Par défaut donc, Safari n’accepte pas les cookies tières. Cependant, il accepte tout de même de les supprimer (allez comprendre…).

2ème différence : persistance des cookies

J’ai ensuite effectué les mêmes tests que pour les autres navigateurs, et là aussi le résultat diffère.

  1. Je n’ai pas de cookies. Je passe en navigation privée, je récupère des cookies, et je repasse en mode normal. Là, tout est OK.
  2. Je me prends des cookies. Je passe en navigation privée : les cookies sont toujours présents. Je cherche à les supprimer (avec les headers HTTP) : impossible, les cookies restent en place. En fait, les cookies reprennent alors la valeur qu’ils avaient avant le passage en navigation privée.

Conclusion

Safari se comporte réellement différemment que les autres navigateurs. La principale « fuite » d’information étant causée par les cookies tièrce, en ce sens le paramétrage par défaut de Safari est plus sécurisé. Cependant, le fait que l’on reste connecté après le passage en navigation privée est assez perturbant dès lors que l’on est habitué aux autres navigateurs. Mais le pire, c’est que l’on n’arrive pas à se déconnecter des services en mode de navigation privée.

Lien : outil de test utilisé pour afficher, écrire et supprimer des cookies