Firefox 9 for developers
========================

Firefox 9 se lanzó para Windows el 20 de diciembre de 2011. El 21 de diciembre de 2011 se lanzó la versión 9.0.1 para Mac y Linux, que corrigió un error de bloqueo descubierto en el último minuto.

Cambios para desarrolladores web
--------------------------------

### HTML

* El atributo `value` de `<li>` ahora puede ser negativo. Los valores negativos anteriores se convertian a 0.
* Ahora puede especificar la hora de inicio y finalización de los medios en la URI de los medios cuando usa los elementos `<audio>` y `<video>`.
* Los elementos `<input>` y `<textarea>` ahora respetan el valor del atributo `lang` al invocar el corrector ortográfico.
* Firefox en Android ahora permite a los usuarios tomar fotos con la cámara de su teléfono sin salir del navegador cuando se usa el elemento `<input>` con `type="file"` y `accept="image/*"` .
* Las imágenes PNG ICO de estilo Windows Vista ahora son compatibles.
* Dibujar imagenes que usan el atributo `crossorigin` para solicitar acceso CORS ya no contaminan el lienzo cuando se otorga CORS.
* El valor del atributo `rowspan` ahora puede ser tan grande como 65 534, en lugar de 8190.
### CSS

* La propiedad `font-stretch` (en-US) ahora es compatible.
* La propiedad `columns` (en-US) ahora es compatible, con el prefijo `-moz`. Esta es una forma abreviada de las siguientes propiedades: `column-width` (en-US) y `column-count`.
* Cuando una hoja de estilo incluida usando el elemento `<link>` ha sido completamente cargada y analizada (pero aún no aplicada al documento), un evento `load` ahora se activa. Además, si se produce un error al procesar una hoja de estilo, se activa un evento de `error`.
* Ahora puede especificar configuraciones de desbordamiento para los bordes izquierdo y derecho del contenido usando una nueva sintaxis de dos valores para `text-overflow`.
### JavaScript

*Ningún cambio.*

### DOM

Uso del modo de pantalla completa

La nueva API de pantalla completa proporciona una forma de presentar contenido utilizando toda la pantalla, sin interfaz de navegador. Esto es genial para video y juegos. Esta API es actualmente experimental y prefijada.

* El método `Node.contains()` ahora está implementado; esto le permite determinar si un nodo dado es descendiente de otro nodo.
* Se implementó el atributo `Node.parentElement`; esto devuelve el padre `Element` de un nodo DOM, o `null` si el padre no es un elemento.
* Los eventos de composición (en-US) de DOM Nivel 3 ahora son compatibles.
* Se implementó el atributo `Document.scripts`; esto devuelve un `HTMLCollection` de todos los elementos `<script>` (en-US) del documento.
* Se implementó el método `Document.queryCommandSupported()` (en-US).
* El conjunto de eventos que se pueden escuchar en los elementos `<body>` se ha revisado para que coincida con el último borrador de la especificación HTML5. La lista de eventos en la referencia de eventos DOM refleja qué eventos se pueden detectar en `<body>`.
* El evento `readystatechange` ahora solo se activa en `Document`, según lo previsto.
* Los manejadores de eventos ahora se implementan como interfaces IDL estándar. En la mayoría de los casos, esto no afectará el contenido, pero hay excepciones.
* Se ha agregado un nuevo tipo de respuesta, "`moz-json`", a `XMLHttpRequest`, lo que permite que `XMLHttpRequest` analice automáticamente cadenas JSON; cuando solicita este tipo, se analiza una cadena JSON devuelta, de modo que el valor de la propiedad `response` es el objeto JavaScript resultante.
* Eventos de "progreso" `XMLHttpRequest` ahora se envían de manera confiable para cada fragmento de datos recibido; en el pasado, era posible que la última parte de los datos recibidos no activará un evento de "progreso". Ahora puede realizar un seguimiento del progreso siguiendo solo los eventos de "progreso", en lugar de tener que monitorear también los eventos de "carga" para detectar la recepción de la última porción de datos.
* En el pasado, llamar a `addEventListener()` con un detector `null` generaba una excepción. Ahora devuelve sin error y sin efecto.
* La nueva propiedad `navigator.doNotTrack` permite que su contenido determine fácilmente si el usuario ha habilitado o no su preferencia de no rastrear; si este valor es "sí", no debe rastrear al usuario.
* Los objetos `Range` y `Selection` ahora se comportan según sus especificaciones cuando `splitText()` (en-US) y `normalize()` (en-US) son llamados.
* El valor de `Node.ownerDocument` para los nodos doctype ahora es el documento en el que se llamó a `createDocumentType()` (en-US) para crear el nodo, en lugar de `null`.
* Se ha eliminado `window.navigator.taintEnabled`; no ha sido compatible en muchos años.
### Workers

* Los *workers* implementados en las URL de blob se rompieron en Firefox 8 y volvieron a funcionar a partir de Firefox 9.
### WebGL

* Los atributos de contexto WebGL `drawingBufferWidth` y `drawingBufferHeight` ahora son compatibles.
### MathML

* Se eliminó el valor `restyle` no estándar para el atributo `actiontype` en los elementos `<maction>`.
* Si bien aún no es compatible, el uso del elemento `mlabeledtr` ya no interrumpe el renderizado por completo. Consulte el error 689641, en Firefox para ver el progreso en el soporte real de este elemento.
### Redes

* Ahora puede enviar el contenido de matrices tipadas en JavaScript (es decir, el contenido de un `ArrayBuffer`) usando XMLHttpRequest.
* Las conexiones WebSocket ahora permiten que no se reciban caracteres en marcos de datos UTF-8 válidos, en lugar de fallar.
* La cabecera HTTP `Accept` para solicitudes XSLT se ha cambiado a "\*/\*" para simplificar. Dado que recuperar XSLT siempre ha vuelto a "\*/\*", tenía sentido simplificar la solicitud inicial.
* Los intentos por parte de un servidor de usar los códigos de respuesta `301 Moved Permanently` (Movido permanentemente) o `307 Temporary Redirect` (Redirección temporal) para redirigir al usuario a un URI `javascript:` ahora resultan en un error de "mala conexión" en lugar de redirigir. Esto evita ciertos tipos de ataques de secuencias de comandos entre sitios.
* El contenido entregado con un `Content-Disposition` se trataba previamente como si el `Content-Disposition` fuera un "archivo adjunto"; esto no siempre funcionó como se esperaba. Ahora se manejan como si `Content-Disposition` estuviera "en línea".
* El tamaño máximo predeterminado de un elemento en la memoria caché del disco se ha aumentado a 50 MB; anteriormente, solo se almacenaban en caché los elementos de hasta 5 MB.
### Herramientas de desarrollador

* La consola web ahora admite sustituciones de cadenas básicas en sus métodos de registro.
* Ahora puede crear bloques de salida anidados visualmente en la consola web, para ayudar a que sea más fácil de leer.
Cambios para Mozilla y desarrolladores de complementos
------------------------------------------------------

Consulte Actualización de complementos para Firefox 9 para obtener una descripción general de los cambios que puede necesitar realizar para que sus complementos funcionen en Firefox 9.

### XUL

* El elemento `<xul:tab>` ahora tiene un elemento `pending` atributo, cuyo valor es `true`, cuando la pestaña está en proceso de ser restaurada por el servicio de almacenamiento de sesiones. Esto se puede usar para diseñar la pestaña en los temas. El atributo no está presente en las pestañas que no están pendientes.
* El elemento `<xul:tab>` ahora tiene un elemento `unread` atributo, cuyo valor es `true`, cuando la pestaña ha cambiado desde la última vez que fue la pestaña activa o si no se ha seleccionado desde que comenzó la sesión actual. El atributo no está presente en las pestañas que no están sin leer.
* Ahora puede usar un `<xul:panel>` como una imagen de arrastre para las operaciones de arrastrar y soltar del DOM. Esto le permite usar la API estándar de arrastrar y soltar para arrastrar y soltar contenido XUL (en-US).
* El método `appendNotification` del elemento `<xul:notificationbox>` ahora permite especificar una devolución de llamada que se llama para eventos interesantes relacionados con el cuadro de notificación. Actualmente, el único evento es "eliminado", que le indica que el cuadro se eliminó de su ventana.
### Cambios en el módulo de código JavaScript

* `FileUtils.jsm` ahora tiene un constructor `File` que devuelve un objeto `nsIFile` que representa un archivo especificado por su nombre de ruta.
### Cambios de servicios

* El servicio de preferencias de contenido ahora maneja la navegación en modo privado (vea error 679784, en Firefox).
### NSPR

* NSPR ahora tiene un módulo "agregar", que le permite agregar nuevos datos al final de un registro existente.
### Cambios de interfaz

#### Interfaces eliminadas

* `nsIGlobalHistory3` se eliminó durante la simplificación del código de Places y DocShell.

#### Varios cambios en la interfaz

* La interfaz `nsISound` tiene una nueva constante, `EVENT_EDITOR_MAX_LEN`. Permite reproducir el sonido del sistema cuando se escriben más caracteres que el máximo permitido en un campo de texto. Actualmente, esto solo se usa en Windows.
* La interfaz `nsIScriptError2` tiene nuevas propiedades `timeStamp` e `innerWindowID`; además, el método `initWithWindowID()` ahora toma una ID de ventana interna en lugar de una ID de ventana externa.
* Se agregó el atributo `nsIBidiKeyboard.haveBidiKeyboards`; esto le permite determinar si el sistema tiene al menos un teclado instalado para cada dirección: de izquierda a derecha y de derecha a izquierda.
* El nuevo atributo `nsIEditor.isSelectionEditable` le permite determinar si el ancla de selección actual es editable. Esto ayuda a respaldar los casos en los que solo se pueden editar partes del documento, al permitirle ver si la selección actual está en una sección editable.
* Los métodos `nsIBrowserHistory.registerOpenPage()` y `nsIBrowserHistory.unregisterOpenPage()` se han eliminado como parte de una revisión de rendimiento en el sistema de Lugares. Puede usar los métodos correspondientes en `mozIPlacesAutoComplete` en su lugar.
* Se agregó el método `nsIDOMWindowUtils.wrapDOMFile()`; esto devuelve un objeto DOM `File` para un `nsIFile` dado.
* Se agregó el método `nsIChromeFrameMessageManager.removeDelayedFrameScript()` para admitir la eliminación de código de carga retrasada. Los complementos con arranque deben usar esto, al apagar, para eliminar cualquier código que haya cargado usando `nsIChromeFrameMessageManager.loadFrameScript()` con el indicador de carga retrasada establecido. Esto está expuesto a complementos como `browser.messageManager.removeDelayedFrameScript()`.
* La interfaz `nsIAppStartup` tiene un nuevo atributo `interrupted`, que le permite saber si el proceso de inicio se interrumpió en algún momento mediante un aviso interactivo. Esto puede ser útil, por ejemplo, cuando se cronometran los inicios durante la evaluación del rendimiento, para poder eliminar los números de las sesiones que se interrumpieron.
* La interfaz `nsIEditorSpellCheck` se ha revisado para admitir la selección por sitio de diccionarios del corrector ortográfico.
### Analizador IDL

El analizador IDL ya no incluye soporte para la noción nunca completamente implementada de punteros únicos.

### Cambios en el sistema de compilación

* Se eliminó la opción `--enable-application=standalone` para construir un XPConnect independiente; no ha funcionado desde 2007 de todos modos.
* Se eliminó la compatibilidad con la creación independiente de Necko y Transformiix XSLT; ya no puede usar `--enable-application=network` o `--enable-application=content/xslt`.
* El sistema de compilación ahora busca `.mozconfig` en `$topsrcdir/.mozconfig` o `$topsrcdir/mozconfig`, y en ningún otro lugar, a menos que anule la ruta `.mozconfig` usando la variable de entorno `MOZCONFIG`.
* Se ha sustituido la utilidad `xpidl` en el SDK por pyxpidl.
### Otros cambios

* El corrector ortográfico ya no tiene un límite arbitrario de longitud de palabra de 130 caracteres en la longitud de las palabras que intentará revisar. Este límite se estableció anteriormente para evitar bloqueos que ocurrían en el corrector ortográfico, pero los errores subyacentes se han solucionado desde entonces.
* Ahora puede registrar componentes para agregar funciones al objeto `window.navigator` mediante la categoría "JavaScript-navigator-property". Vea Agregar APIs al objeto navegador para detalles y ejemplos.
Véase también
-------------

* Firefox 8 for developers (en-US)
* Firefox 7 for developers (en-US)
* Firefox 6 for developers (en-US)
* Firefox 5 for developers (en-US)
* Firefox 4 for developers (en-US)
* Firefox 3.6 for developers (en-US)
* Firefox 3.5 for developers
* Firefox 3 for developers
* Firefox 2 for developers
* Firefox 1.5 for developers