Firefox 9 pour les développeurs

  1. Notes de versions pour développeurs
    1. Notes de versions pour développeurs
  2. Modules complémentaires
    1. WebExtensions
    2. Thèmes
  3. Fonctionnement interne de Firefox
    1. Le projet Mozilla
    2. Gecko
    3. Mode « headless »
    4. Modules de code Javascript
    5. JS-ctypes
    6. Le projet MathML
    7. MFBT
    8. Les projets Mozilla
    9. Le système de préférences
    10. Connexions WebIDL
    11. XPCOM
    12. XUL
  4. Développer et contribuer
    1. Instructions de compilation
    2. Configuration des options de compilation (en-US)
    3. Fonctionnement de la compilation
    4. Code source de Mozilla
    5. Localisation
    6. Mercurial
    7. Assurance qualité
    8. Utilisation de code Mozilla dans d'autres projets

Firefox 9, basé sur Gecko 9.0, est sorti le 20 décembre 2011 sur Windows. La version 9.0.1, qui corrige un problème de plantage découvert au dernier moment, est sortie le 21 décembre 2011, sur Mac et Linux.

Changements pour les développeurs Web

HTML

CSS

  • La propriété font-stretch est à présent supportée.
  • La propriété columns est à présent supportée, avec le préfixe -moz. C'est un raccourci des propriétés suivantes : column-width et column-count.
  • Quand une feuille de style incluse à l'aide de l'élément <link> a été entièrement chargée et analysée (mais pas encore appliquée au document), l'load event est désormais déclenché. En outre, si une erreur survient durant le traitement d'une feuille de style, l'événement error est déclenché.
  • Vous pouvez à présent spécifier les paramètres de débordement pour les bords, à la fois à gauche et à droite, du contenu en utilisant une nouvelle syntaxe de deux valeurs pour text-overflow.

DOM

Utilisation du mode plein écran (en-US)

La nouvelle API pour le plein écran offre un moyen de présenter le contenu en utilisant la totalité de l'écran, sans l'interface du navigateur. C'est très bien pour les vidéos et les jeux. Cette API est encore expérimentale et préfixée.

  • La méthode Node.contains() est désormais implémentée, elle vous permet de déterminer si un nœud donné est un descendant d'un autre noeud.
  • L'attribut Node.parentElement a été implémenté, cela renvoie l'Element parent d'un noeud DOM, ou null si le parent n'est pas un élément.
  • Les évènements de composition (en-US) du DOM Level 3 sont à présent supportés.
  • L'attribut Document.scripts a été implémenté, il renvoie HTMLCollection de tous les éléments <script> du document.
  • la méthode Document.queryCommandSupported() a été implémentée.
  • L'ensemble des événements qui peuvent être écoutés sur les éléments <body> a été révisé pour correspondre à la dernière version de la spécification HTML5. La liste des événements dans la référence d'événements DOM reflète ceux qui peuvent être écoutés sur les <body>.
  • L'évènement readystatechange est désormais uniquement tiré sur le document, comme prévu.
  • Les gestionnaires d'événements sont désormais implémentés comme des interfaces IDL standard. Dans la plupart des cas, cela n'affectera pas le contenu, mais il y a des exceptions (en-US).
  • Un nouveau type de réponse, "moz-json", a été ajouté à XMLHttpRequest, laissant XMLHttpRequest analyser automatiquement les chaînes JSON, quand vous demandez ce type, une chaîne JSON est analysé, afin que la valeur de la propriété response est la résultante de l'objet JavaScript.
  • Les évènements "progress" de XMLHttpRequest (en-US) sont à présent correctement envoyé pour chaque bloc de données reçu, dans le passé il était possible pour que le dernier bloc de données reçu ne déclenche pas un évènement "progress". Maintenant, vous pouvez suivre uniquement la progression des évènements "progress", au lieu d'avoir également à surveiller les évènements "load" pour détecter la réception du dernier bloc de données.
  • Dans le passé, l'appel de addEventListener() avec un écouteur null renvoyait une exception. maintenant il ne retourne plus d'erreur et est sans effet.
  • La nouvelle propriété navigator.doNotTrack permet à votre contenu de déterminer facilement si l'utilisateur a activé la préférence do-no-track, si la valeur est "oui", vous ne devez pas suivre l'utilisateur.
  • Les objets Range et Selection se comportent désormais selon leurs spécifications lorsque splitText() et normalize() sont appelés.
  • La valeur de Node.ownerDocument pour les noeuds de doctype est désormais le document sur lequel createDocumentType() (en-US) a été appelé pour créer le noeud, au lieu de null.
  • window.navigator.taintEnabled a été retiré, il n'est plus supporté depuis plusieurs années.

Workers

  • Les workers implémentés dans les URLs blob étaient cassés sous Firefox 8, et sont de nouveaux disponibles à partir de Firefox 9.

WebGL

  • Dans le cadre de WebGL les attributs drawingBufferWidth et drawingBufferHeight sont à présent supportés.

MathML

  • La valeur non-standard restyle pour les attributs actiontype des éléments <maction> a été retirée.
  • Alors qu'il n'était pas encore supporté, l'utilisation de l'élément <mlabeledtr> ne casse plus complètement le rendu. Voir le bug 689641 pour l'avancement du support de cet élément.

Réseau

  • Vous pouvez désormais envoyer le contenu de tableaux JavaScript typés (en-US) (c'est, le contenu d'un objet ArrayBuffer (en-US)) en utilisant XMLHttpRequest (en-US).
  • Les connexions WebSocket permettent désormais des non-caractères autres que UTF-8 des trames de données devant être reçues, au lieu d'échouer.
  • L'en-tête HTTP Accept pour les réquêtes XSLT a été changée pour "*/*" pour simplifier. Puisque l'extraction d'XSLT est toujours retombée à "* / *", il était logique de faire la simplification.
  • Les tentatives faites par un serveur pour utiliser les codes de réponses 301 Moved Permanently ou 307 Temporary Redirect pour rediriger l'utilisateur vers une URI javascript: donne désormais lieu à l'erreur "connexion incorrecte" au lieu de vraiment rediriger. Cela évite certaines attaques de type cross-site scripting.
  • Le contenu servi par Content-Disposition vide avait déjà été traité comme si Content-Disposition était attachment", ce qui ne fonctionnait pas toujours comme prévu. C'est désormais traité comme si Content-Disposition était "inline".
  • La taille maximale par défaut d'un élément dans le cache disque a été augmentée à 50 Mo, auparavant, seuls les éléments jusqu'à 5 Mo étaient mis en cache.

Outils de développement

Changements pour les développeurs de Mozilla et de modules complémentaires

Voir Updating add-ons for Firefox 9 pour un aperçu des modifications que vous devriez apporter pour rendre vos extensions compatibles avec Firefox 9.

XUL

  • L'élément tab dispose à présent d'un attribut pending, dont la valeur est true, lorsque l'onglet est en train d'être rétabli par le service de sauvegarde de session. Il peut être utilisé pour le style de l'onglet dans les thèmes. L'attribut n'est pas présent sur les onglets qui ne sont pas en attente.
  • L'élément tab dispose à présent d'un attribut unread, dont la valeur est true, lorsque l'onglet a changé depuis la dernière fois qu'il était actif ou si il n'a pas été sélectionné depuis que la session en cours a commencé. L'attribut n'est pas présent sur les onglets qui ne sont pas lus.
  • Vous pouvez désormais utiliser panel comme une image glissée pour les opérations DOM de glisser-déposer. Cela vous permet d'utiliser l'API standard drag & drop pour glisser et déposer du contenu XUL (en-US).
  • La méthode appendNotification de l'élément notificationbox vous permet désormais de spécifier un rappel qui est appelé pour des événements intéressants liés à la zone de notification. Actuellement, le seul événement est "removed", qui vous indique la zone qui a été retirée de sa fenêtre.

Changements dans le module de code JavaScript

  • FileUtils.jsm dispose désormais du constructeur File qui renvoie l'objet nsIFile représentant un fichier spécifié par son chemin d'accès.

Changement dans le service

NSPR

  • NSPR dispose désormais d'un module "append", qui vous permet d'ajouter de nouvelles données à la fin d'un journal existant.

Changements dans les interfaces

Interface supprimée

  • nsIGlobalHistory3 a été enlevée lors de la réduction de Places et du code DocShell.

Divers changements dans les interfaces

  • L'interface nsISound a une nouvelle constante EVENT_EDITOR_MAX_LEN. Elle permet de lire le son du système quand plus de caractères que le maximum autorisé sont entrés dans un champ de texte. Actuellement, ce n'est utilisé que sous Windows.
  • L'interface nsIScriptError2 a de nouvelles propriétés, timeStamp et innerWindowID ; en plus, la méthode initWithWindowID() prend désormais un ID de fenêtre intérieure au lieu d'un ID de fenêtre extérieure.
  • L'attribut nsIBidiKeyboard.haveBidiKeyboards a été ajouté, il vous permet de vérifier que le système a au moins un clavier installé dans chaque sens : de gauche à droite ou de droite à gauche.
  • Le nouvel attribut nsIEditor.isSelectionEditable vous permet de déterminer si l'ancre de sélection en cours est modifiable. Cela permet de supporter les cas où seules certaines parties du document sont modifiables, en vous permettant de voir si la sélection actuelle est dans une partie modifiable.
  • Les méthodes nsIBrowserHistory.registerOpenPage() et nsIBrowserHistory.unregisterOpenPage() ont été supprimées dans le cadre d'une refonte des performances dans le système Places. A la place, vous pouvez utiliser les méthodes correspondantes de mozIPlacesAutoComplete.
  • La méthode nsIDOMWindowUtils.wrapDOMFile() a été ajoutée, elle retourne un objet DOM File pour un nsIFile donné.
  • La méthode nsIChromeFrameMessageManager.removeDelayedFrameScript() a été ajouté pour supporter la suppression des scripts de chargement différé. Les extensions amorcées doivent l'utilisée, lors de l'arrêt, pour éliminer tous les scripts chargés à l'aide de nsIChromeFrameMessageManager.loadFrameScript() avec l'indicateur de charge différé. Cela expose des extensions comme browser.messageManager.removeDelayedFrameScript().
  • L'interface nsIAppStartup a un nouvel attribut interrupted, qui vous permet de savoir si la procédure de démarrage a été interrompue à tout moment par une commande interactive invitée. Cela peut être utile, par exemple, lors de la synchronisation du démarrage pendant l'évaluation des performances, pour être en mesure de déposer le nombre de sessions qui ont été interrompues.
  • L'interface nsIEditorSpellCheck a été revue pour supporter le choix des sites de dictionnaires pour la vérification orthographique.

Parseur IDL

Le parseur IDL ne supporte plus la notion de pointeurs unique qui n'a jamais été entièrement implémentée.

Changements dans le système de compilation

  • L'option --enable-application=standalone pour la compilation autonome d'XPConnect a été retirée, elle n'a pas été utilisée depuis 2007.
  • Le support de la compilation autonome de Necko et Transformiix XSLT a été retiré, vous ne pouvez plus utilisez --enable-application=network ou --enable-application=content/xslt.
  • Le système de compilation cherche désormais .mozconfig à $topsrcdir/.mozconfig ou $topsrcdir/mozconfig, et pas ailleurs, sauf si vous remplacez le chemin .mozconfig en utilisant la variable d'environnement MOZCONFIG.
  • L'utilitaire xpidl a été remplacé dans le SDK avec pyxpidl.

Autres changements

  • Le correcteur orthographique n'a plus la limite de 130 caractères sur la longueur des mots à vérifier. Cette limite était précédemment en place pour éviter les plantages qui sont survenus dans le correcteur orthographique, mais les bogues sous-jacents ont depuis été corrigés.
  • Vous pouvez désormais enregistrer des composants pour ajouter des fonctionnalités à l'objet [window.navigator](/fr/docs/Web/API/Window/navigator "Renvoie une référence à l'objet navigator , qui peut être interrogé pour obtenir des informations concernant l'application exécutant le script.") à l'aide de la catégorie "JavaScript-navigator-property". Voir Ajout des APIs de l'objet navigator pour plus de détails et des exemples.

Voir aussi