Firefox 4 para desarrolladores

Hubo un error de script en esta página. Mientras los editores del sitio lo solucionan, puedes ver una parte del contenido más abajo.

{{ draft() }}

Firefox 4, que entró en beta a fines de junio del 2010, mejora el rendimiento, agrega una mayor compatibilidad para HTML5 y otras tecnologías Web en desarrollo, y otras mejoras en la seguridad. Este artículo provee información inicial sobre esta futura versión y qué características estarán disponibles para los desarrolladores Web, desarrolladores de extensiones y desarrolladores sobre la plataforma Gecko.

Muchas de estas funcionalidades pueden ser probadas actualmente en las versiones de Firefox 4 beta o, si tienes espíritu aventurero, en las versiones nocturnas.

Nota: Este artículo está en proceso, así como todos los artículos enlazados desde esta página. Algunos nombres de artículos son marcadores de posición y algunos temas podrán dividirse en muchos artículos. En general, ten cuidado a la hora de enlazar a esos artículos, al menos de momento.

Funcionalidades para desarrolladores web

Gecko usa ahora un parseador o analizador HTML5, que arregla algunos problemas, mejora la interoperabilidad y el rendimiento. También permite incrustar contenido en SVG y MathML directamente en el marcado HTML.

HTML

Conoce el analizador de HTML5
Una mirada a lo que significa para ti el analizador HTML5 y cómo incrustar SVG y MathML dentro de tu contenido.
Formularios en HTML5
Una mirada a las mejoras en los formularios web en HTML5. Entre los cambios se encuentran los tipos de entrada agregados en el elemento <input> , validación de datos y muchos más.
Secciones y esquema de un documento HTML5
Gecko ya admite los nuevos elementos de HTML5 relacionados a secciones en un documento: {{ HTMLElement("article") }}, {{ HTMLElement("section") }}, {{ HTMLElement("nav") }}, {{ HTMLElement("aside") }}, {{ HTMLElement("hgroup") }}, {{ HTMLElement("header") }} y {{ HTMLElement("footer") }}.
Atributo hidden de HTML5
Este atributo, común a todos los elementos, se utiliza para ocultar contenido de una página web que no es relevante actualmente para el usuario.
Otros elementos de HTML5
Gecko ya admite el uso de los siguientes nuevos elementos en HTML5: {{ HTMLElement("mark") }}, {{ HTMLElement("figure") }} y  {{ HTMLElement("figcaption") }}.
WebSockets
Una guía para usar la nueva API de WebSockets para comunicación en tiempo real entre una aplicación web y un servidor.

Diversos cambios en HTML

  • Los elementos {{ HTMLElement("textarea") }} ahora son de tamaño variable por defecto; puedes usar la propiedad CSS {{ cssxref("resize") }} para desabilitarlos.
  • canvas.getContext y canvas.toDataURL no lanzan una excepción cuando se invocan con argumentos no reconocidos.
  • El elemento <canvas> ya admite el método específico de Mozilla mozGetAsFile(), que te permite obtener un archivo basado en memoria que contiene una imagen de los contenidos de canvas. Consulta HTMLCanvasElement si deseas tener más detalles.
  • canvas2dcontext.lineCap y canvas2dcontext.lineJoin ya no lanzan una excepción cuando se les asigna una valor no reconocido.
  • canvas2dcontext.globalCompositeOperation no lanza una excepción cuando se les asigna un valor no reconocido ni tampoco admite el valor no estándar darker.

 

  • Se ha eliminado la compatibilidad para el elemento obsoleto <spacer>, que estaba ausente en el resto de navegadores.
  • El elemento <isindex> es creado como un elemento simple sin propiedades ni métodos cuando se invoca a document.createElement(),
  • Gecko ya admite invocar a click()en elementos <input>  para abrir el selector de archivos. Mira el ejemplo del artículo Usar archivos desde aplicaciones web.
  • El elemento <input>  admite un nuevo atributo mozactionhint, que te permite especificar la etiqueta para la tecla enter de los teclados virtuales.
  • Los elementos <script> dentro de los elementos <iframe>, <noembed> y <noframe> ahora se ejecutan, lo que en anteriores versiones de Firefox no hacían. Esto cumple con la especificación y coincide con el comportamiento de otros navegadores.

 

CSS

Transiciones CSS
Está disponible en Firefox 4 una nueva compatibilidad para las transiciones CSS.
Valores calculados en CSS
Se ha agregado la compatibilidad para -moz-calc , lo que te permite especificar valores <length> como expresiones matemáticas.
Agrupación de selectores
Compatibilidad para {{ cssxref(":-moz-any") }} para agrupar selectores y descomponer elementos de combinación en factores.
Compatibilidad background image subrectangle
La función {{ cssxref("-moz-image-rect") }} hace que sea posible utilizar subrectángulos de imágenes como background-image (imágenes de fondo).
Propiedades CSS touch
Se agrega la compatibilidad para propiedades touch. Más adelante se aportarán más detalles y nombres reales de los artículos.
 Uso de elementos arbitrarios como fondos CSS
Puedes utilizar la función CSS {{ cssxref("-moz-element") }} y la función DOM domxref {{ domxref("document.mozSetImageElement()") }} para usar elementos HTML arbitrarios como fondo.
Privacidad y el selector :visited
Se han hecho cambios en la información que se puede obtener sobre el estilo de los enlaces visitados usando selectores CSS, lo puede afectar a algunas aplicaciones web.

Nuevas propiedades CSS

Propiedad Descripción
{{ cssxref("-moz-font-feature-settings") }} Te permite personalizar las funciones avanzadas de las fuentes OpenType.
{{ cssxref("-moz-tab-size") }} Especifica el ancho en caracteres de espacio de un carácter de tabulación (U 0009) al representar el texto.
{{ cssxref("resize") }} Te permite controlar las dimensiones a las que se puede adaptar un elemento.

Nuevas  seudoclases CSS

Seudoclase Descripción
{{ cssxref(":-moz-handler-crashed") }} Se utiliza para aplicar estilo a los elementos cuyos plugins se han caído.
{{ cssxref(":-moz-placeholder") }} Aplicado al texto de marcador de posición en los campos de formulario.
{{ cssxref(":-moz-submit-invalid") }} Aplicado al botón de enviar de los formularios cuando uno o más de los campos del formulario no se valida.
{{ cssxref(":-moz-window-inactive") }} Aplicado a los elementos de las ventanas inactivas.
{{ cssxref(":invalid") }} Aplicado de manera automática a los campos {{ HTMLElement("input") }} cuando su contenido no es válido.
{{ cssxref(":optional") }} Aplicado automáticamente a los campos{{ HTMLElement("input") }} que no especifican el atributo required.
{{ cssxref(":required") }} Aplicado automáticamente a los campos{{ HTMLElement("input") }} que especifican el atributo required.
{{ cssxref(":valid") }} Aplicado de manera automática a los campos {{ HTMLElement("input") }} cuando su contenido se valida con éxito.

Nuevos seudoselectores CSS

Seudoselector Descripción
{{ cssxref(":-moz-focusring") }} Te permite especificar el aspecto de un elemento cuando Gecko cree que debería tener representada una indicación del foco .

Nuevas funciones CSS

Función Descripción
{{ cssxref(":-moz-any") }} Te permite agrupar selectores y descomponer en factores los elementos de combinación.
{{ cssxref("-moz-calc") }} Te permite especificar valores {{cssxref("<length>")}} como expresiones matemáticas.
{{ cssxref("-moz-element") }} Te permite utilizar un elemento arbitrario como fondo de {{ cssxref ("background-image") }} y {{ cssxref("background") }}.
{{ cssxref("-moz-image-rect") }} Te permite utilizar un subrectángulo de una imagen como {{ cssxref ("background-image") }} o {{ cssxref("background") }}.

Propiedades CSS renombradas

Nombre anterior Nuevo nombre Notas
-moz-background-size {{ cssxref("background-size") }} El nombre -moz-background-size ya no es compatible.
-moz-border-radius {{ cssxref("border-radius") }} El nombre anterior es admitido por un tiempo limitado para que puedas actualizar tus sitios. Los cambios de representación también se han hecho para que coincida con la última versión de la especificación.
-moz-box-shadow {{ cssxref("box-shadow") }}  

Varios cambios en CSS

  • La propiedad {{ cssxref ("text-shadow") }} ahora limita el radio de desenfoque a 300px por razones de integridad y rendimiento.
  • La propiedad {{ cssxref("overflow") }} ya no se aplica a los elementos agrupados en tablas ( <thead> , <tbody> y <tfoot> ).
  • La propiedad {{ cssxref("-moz-appearance") }} ahora es compatible con el valor -moz-win-borderless-glass, que aplica a un elemento un aspecto sin márgenes Aero Glass.
  • Se ha agregado la función multimedia -moz-device-pixel-ratio, que permite que se usen los píxeles del dispositivo por ratio de píxel CSS para las Consultas a medios .
  • El control de Gecko sobre las unidades CSS ha sido revisado para adaptarse mejor a otros navegadores y para traducir con mayor precisión las longitudes absolutas en cálculos de píxeles de pantalla basados en los ppp del dispositivo.

Gráficos y video

 
WebGL
El estándar WebGL en desarrollo ya es admitido por Firefox.
Optimizar el rendimiento de los gráficos
Consejos y trucos para sacarle el máximo partido a los gráficos y al rendimiento del video en Firefox 4.
Compatibilidad para video WebM
El nuevo formato de video abierto WebM es compatible con Gecko 2.0.
Animación SVG con SMIL
La compatibilidad para la animación SMIL de SVG ya está disponible.
Utilizar SVG como imágenes y como fondos CSS
Ahora puedes utilizar SVG con el elemento {{ htmlelement("img") }}, así como un {{ cssxref("background-image") }} CSS.
Compatibilidad con el atributo multimedia buffered
El atributo buffered de los elementos {{ HTMLElement("video") }} y {{ HTMLElement("audio") }} es admitido ya, lo que te permite determinar qué rangos de un archivo multimedia se han almacenado en el búfer. La interfaz DOM {{ domxref("TimeRanges") }} ha sido implementada para admitirlo.
Atributo multimedia preload
Se ha implementado el atributo preload de la especificación HTML 5, en sustitución del atributo autobuffer, que se aplicaba anteriormente y que ya no se admite. Esto afecta a los elementos {{ HTMLElement ("video") }} y {{ HTMLElement ("audio") }}, así como a la interfaz de {{ interface("nsIDOMHTMLMediaElement") }}.
Mejoras SVG en la posición de texto
Ahora puedes especificar listas para los valores de las propiedades x , y , dx y dy en elementos {{ SVGElement ("text") }} y {{ SVGElement ("tspan") }} SVG. Esto te permite controlar de forma individual la posición de cada carácter en una cadena.

DOM

Matrices de tipo JavaScript
Se ha añadido la compatibilidad para las matrices de tipo JavaScript, lo que te permite manipular los búferes que contienen datos sin procesar utilizando tipos de datos nativos. Varias APIs hacen uso de ello, incluyendo la API de archivos , WebGL y WebSockets .
Obtener rectángulos límite para rangos
El objeto {{ domxref ("Range") }} ahora tiene los métodos {{ domxref("range.getClientRects()") }} y {{ domxref("range.getBoundingClientRect()") }}.
Capturar eventos del ratón sobre elementos arbitrarios
Se ha agregado la compatibilidad para las APIs de Internet Explorer setCapture() y releaseCapture(). Mira {{ bug(503943) }}.
Manipular el historial del navegador
El objeto historial del documento existente, disponible a través del objeto {{ domxref ("window.history") }}, ahora es compatible con los nuevos métodos HTML5 pushState() y replaceState().
Animaciones con MozBeforePaint
Un nuevo evento se ha añadido que, en concertación con el método {{ domxref("window.mozRequestAnimationFrame()") }} y la propiedad {{ domxref("window.mozAnimationStartTime") }}, proporciona una manera de crear animaciones que se sincronizan entre sí.
Eventos touch y multi-touch
Se ha añadido la compatibilidad para los eventos touch y multi-touch.

Han cambiado las interfaces DOM de los elementos HTML

Varios elementos HTML han incorporado cambios en sus interfaces DOM para adaptarlas a los requisitos de la especificación de HTML 5, como se muestra a continuación.

Interfaz de Firefox 3.6 Interfaz en Firefox 4 Elemento HTML
HTMLSpanElementHTMLSpanElement HTMLElement {{ HTMLElement("abbr") }}, {{ HTMLElement("acronym") }}, {{ HTMLElement("address") }}, {{ HTMLElement("b") }}, {{ HTMLElement("bdo") }}, {{ HTMLElement("big") }}, {{ HTMLElement("blink") }}, {{ HTMLElement("center") }}, {{ HTMLElement("cite") }}, {{ HTMLElement("code") }}, {{ HTMLElement("dd") }}, {{ HTMLElement("dfn") }}, {{ HTMLElement("dt") }}, {{ HTMLElement("em") }}, {{ HTMLElement("i") }}, {{ HTMLElement("kbd") }}, {{ HTMLElement("listing") }}, {{ HTMLElement("nobr") }}, {{ HTMLElement("plaintext") }}, {{ HTMLElement("s") }}, {{ HTMLElement("samp") }}, {{ HTMLElement("small") }}, {{ HTMLElement("strike") }}, {{ HTMLElement("strong") }}, {{ HTMLElement("sub") }}, {{ HTMLElement("sup") }}, , {{ HTMLElement("tt") }}, {{ HTMLElement("u") }}, {{ HTMLElement("var") }}, {{ HTMLElement("xmp") }}
HTMLDivElement HTMLElement {{ HTMLElement("noembed") }}, {{ HTMLElement("noframes") }}, {{ HTMLElement("noscript") }}
HTMLWBRElement HTMLElement {{ HTMLElement("wbr") }}

Varios cambios DOM

  • El ajuste de un elemento {{ HTMLElement ("textarea") }} ahora se puede controlar a través del DOM, gracias al atributo DOM wrap. {{ bug(41464) }}
  • Los elementos {{ HTMLElement ("script") }} creados por medio de {{ domxref("document.createElement()") }} e insertados en un documento ahora se comportan por defecto de acuerdo a la especificación HTML 5. Las secuencias de comandos con el atributo src se ejecutan en cuanto están disponibles (sin guardar el orden) y las secuencias de comandos sin el atributo src se ejecutan de forma sincrónica. Para insertar scripts dentro de otros scripts que ejecuten el atributo src en el orden de inserción, ajusta en ellos .async=false.
  • Los objetos DOM {{ domxref("file") }} ahora ofrecen una propiedad url.
  • Compatibilidad de FormData para XMLHttpRequest.
  • Se ha implementado la propiedad {{ domxref ("element.isContentEditable") }}.
  • La propiedad {{ domxref ("document.currentScript") }} le permite determinar qué script del elemento {{ HTMLElement ("script") }} se está ejecutando actualmente. Los nuevos eventos {{ domxref ("element.onbeforescriptexecute") }} y {{ domxref ("element.onafterscriptexecute") }} se activan antes y después de que se ejecute un elemento script.
  • Se agregó la propiedad mozSourceNode al objeto DragTransfer.
  • Se agregó el método selection.modify() para el objeto {{ domxref("Selection") }}, lo que te permite modificar fácilmente la selección de texto o la posición actual del cursor en una ventana del navegador.
  • Se ha eliminado la compatibilidad para el objeto window.directories y la función directories para {{ domxref("window.open") }}, que no son compatibles con ningún otro navegador. Utiliza personalbar en su lugar. {{ bug (474058) }}
  • Se ha añadido la propiedad {{ domxref ("event.mozInputSource") }} a los eventos DOM de interfaz de usuario. Esta propiedad no estándar te permite determinar el tipo de dispositivo que generó un evento.
  • Se ha implementado el evento {{ domxref ("document.onreadystatechange") }}.
  • El método {{ domxref ("document.createElement") }} ya no acepta en modo "quirks" < y > alrededor del nombre de la etiqueta.
  • Se han agregado los métodos {{ domxref("element.setCapture()") }} y {{ domxref("document.releaseCapture()") }}, que permiten a los elementos que continúen el seguimiento de los eventos del ratón, incluso cuando el ratón está fuera de su zona normal de seguimiento después de que haya ocurrido un evento mousedown.
  • Se ha agregado la propiedad {{ domxref ("window.mozPaintCount") }}, que te permite determinar cuántas veces ha sido pintado un documento. Esto puede ser útil cuando se esté comprobando el rendimiento de tu aplicación web.
  • El token de idioma se ha quitado de {{ domxref ("window.navigator.appVersion") }} y {{ domxref ("window.navigator.userAgent ") }}. Usa {{ domxref ("window.navigator.language") }} o el encabezado Accept-Language en su lugar.  {{ Bug (572656) }}
  • El objeto XMLHttpRequest ahora expone la respuesta como una matriz de tipo JavaScript, así como una cadena, usando la propiedad específica de Gecko mozResponseArrayBuffer.
  • Los eventos del ratón ahora incluyen una propiedad mozPressure que indica la cantidad de presión sobre los dispositivos de entrada sensibles a la presión compatibles.
  • Los métodos {{ domxref("window.URL.createObjectURL()") }} y {{ domxref("window.URL.revokeObjectURL()") }} te permiten crear URLs objeto que hacen referencia a archivos locales.
  • El método {{ domxref("DOMImplementation.createHTMLDocument()") }} te permite crear un nuevo documento HTML.
  • {{ domxref("Node.mozMatchesSelector()") }} ahora lanza una excepción SYNTAX_ERR si la cadena de selector especificada no es válida, en lugar de devolver incorrectamente false .
  • Ahora puedes establecer los valores de las propiedades SVG de un elemento utilizando la sintaxis abreviada lo mismo que con CSS. Por ejemplo, element.style.fill = 'lime' . Consulta {{ domxref ("element.style") }} para tener más detalles.
  • La raíz del documento tiene ahora un atributo privatebrowsingmode que describe el estado del modo de navegación privada, incluyendo una indicación sobre si la navegación privada es temporal o permanente para la sesión.
  • El segundo parámetro del método {{ domxref("window.getComputedStyle()") }} ahora es opcional, como lo es en todos los navegadores importantes.
  • El objeto DOM StorageEvent coincide ahora con la última versión de la especificación.
  • El retraso mínimo permitido para el método {{ domxref("window.setTimeout()") }} es ahora una preferencia, dom.min_timeout_value .
  • El evento MozAfterPaint ya no se envía de forma predeterminada, debido a un problema de seguridad potencial. Se puede volver a habilitar mediante el establecimiento de una preferencia.

Seguridad

Política de Seguridad sobre Contenidos (Content Security Policy, CSP)
La Política de Seguridad sobre Contenidos (CSP) es una propuesta de Mozilla diseñada para ayudar a los diseñadores y administradores de servidores a especificar cómo interactúa el contenido de sus sitios web. El objetivo es ayudar a detectar y mitigar ataques como secuencias de comandos entre sitios e inyección de datos.
Seguridad Estricta de Transporte HTTP
La Seguridad Estricta de Transporte HTTP es una característica de seguridad que permite a un sitio web decirle a los navegadores que sólo deben comunicarse por medio de HTTPS, en lugar de HTTP.
El encabezado de respuesta X-FRAME-OPTIONS
El encabezado de respuesta HTTP X-FRAME-OPTIONS introducido en Internet Explorer 8 ya es compatible con Firefox. Esto permite que los sitios indiquen si sus páginas se pueden o no utilizar en los marcos y, de ser así, restringirlo o no al mismo origen.
Cambios en la cadena del agente de usuario
Como medio para reducir la cantidad de datos enviados y la entropía en las peticiones HTTP (ver {{ bug ("572650 ") }}), los tokens de idioma y de intensidad criptográficos han sido eliminados de la cadena del agente de usuario.

JavaScript

Para una visión general de los cambios implementados en JavaScript 1.8.5, consulta Novedades en JavaScript 1.8.5 . JavaScript en Firefox 4 tendrá la adhesión adicional al estándar ECMAScript 5.

Herramientas para desarrolladores

Uso de la Consola Web
La herramienta Consola Web es una ayuda de depuración útil para los desarrolladores web y desarrolladores de extensiones por igual.

{{ gecko_callout_heading ("2.0") }}

La Consola de errores está desactivada por defecto a partir de Firefox 4. Puedes volver a habilitarla cambiando la preferencia devtools.errorconsole.enabled a true y reiniciando el navegador.

Cambios para desarrolladores de Mozilla y de complementos/agregados

Para obtener consejos útiles sobre la actualización de las extensiones existentes para Firefox 4, puedes ver Actualizar extensiones para Firefox 4 . Hay varios cambios claves que rompen la compatibilidad con los complementos existentes, así que asegúrate de leer este artículo.

Si eres un desarrollador de temas, es aconsejable que leas Cambios en los temas de Firefox 4 para entender algunos cambios fundamentales que tendrás que tener en cuenta.

Módulos de código JavaScript

Medición del rendimiento con el módulo de código PerfMeasurement.jsm
El módulo de código PerfMeasurement.jsm proporciona una API para medir los datos del rendimiento a nivel de la CPU en código JavaScript.

Distintos cambios en módulos de código

Cambios en DOM

{{ domxref("ChromeWorker") }}
Un nuevo tipo de worker para código privilegiado, lo que te permite utilizar cosas como js-ctypes de workers en las extensiones y en el código de aplicación.
Eventos touch
Se ha añadido la compatibilidad para eventos touch (no estándar), los cuales permiten realizar el seguimiento de varios dedos en movimiento sobre una pantalla táctil al mismo tiempo.

XUL

Cambios en el elemento tabbrowser

Se hicieron varios cambios en el elemento {{ XULElem("tabbrowser") }} que afectan directamente a las extensiones que interactúan con pestañas. Además de ser compatibles con las pestañas de aplicaciones, estos cambios también transforman la barra de pestañas en una barra de herramientas estándar, lo cual permite al usuario arrastrar botones de la barra de herramientas hasta la misma.

  • Los eventos TabClose, TabSelect y TabOpen ya no se propagarán al elemento {{ XULElem("tabbrowser") }} ( gBrowser ). Es recomendable que los detectores de eventos para dichos eventos se agreguen a gBrowser.tabContainer en lugar de gBrowser directamente.
  • El menú contextual de pestañas ha dejado de ser un niño anónimo de {{ XULElem("tabbrowser") }}. Por lo tanto, pueden ser superpuestos directamente con superposiciones XUL . También se puede acceder de forma más directa en JavaScript a través de gBrowser.tabContextMenu . Puedes ver esta entrada de blog para tener más detalles.
  • Se ha agregado la nueva propiedad {{ XULProp ("visibleTabs") }}, que te permite obtener una matriz de las pestañas actualmente visibles y, por tanto, determinar qué pestañas son visibles en el conjunto de pestañas actual. Esto es utilizado por Firefox Panorama, por ejemplo.
  • Añadido el nuevo método {{ XULMeth2 ("showOnlyTheseTabs") }}, utilizado por Firefox Panorama.
  • Añadido el nuevo método {{ XULMeth2 ("getIcon") }}, que te permite obtener el favicon de una pestaña sin tener que tirar del elemento {{ XULElem ("browser") }}.
  • Añadida la nueva propiedad {{ XULProp ("tabbrowser.tabs") }}, que te permite fácilmente obtener una lista de las pestañas en un elemento {{ XULElem ("tabbrowser") }}.
  • Los nuevos métodos {{ XULMeth2 ("pinTab") }} y {{ XULMeth2 ("unpinTab") }} permiten fijar y eliminar pestañas fijas (es decir, intercambiarlas entre las pestañas de aplicaciones y las pestañas normales).
  • Añadidos el método {{ XULMeth2("getTabModalPromptBox") }} y el atributo {{ XULAttr("tabmodalPromptShowing") }} para admitir alertas modales sobre pestañas.

Cambios en elementos emergentes

  • El elemento {{ xulelem ("popup") }} ha dejado de ser compatible, así que se recomienda usar {{ xulelem ("menupopup") }} en su lugar. (Si continúas utilizando popup , te encontrarás con problemas técnicos, ya que el elemento no tiene ningún significado especial. Por ejemplo, {{ xulelem ("menuseparator") }} puede aparecer transparente cuando se utiliza en un {{ xulelem("popup") }}.)
  • El elemento XUL {{ XULElem("menupopup") }}tiene ahora una propiedad {{ XULProp("triggerNode") }}, que indica el nodo en el que ocurrió el evento que hizo que el elemento emergente se abriera. Esto también requiere agregar un parámetro de evento desencadenante al método {{ XULMeth2 ("openPopup") }}. Se ha agregado, además, la propiedad {{ XULProp ("anchorNode") }}, que devuelve el anclaje que se especificó cuando se creó el elemento emergente.
  • El elemento {{ XULElem ("panel") }} ofrece ahora los atributos {{ XULAttr ("fade") }} y {{ XULAttr ("flip") }}, que se utilizan para configurar el comportamiento de los nuevos paneles de notificación en estilo "flecha".

Compatibilidad de XUL remotos eliminada

XUL remotos ya no es compatible, lo que afecta a los documentos XUL que se sirven a través de HTTP. Del mismo modo, ya no se pueden cargar documentos XUL con file:// URLs a menos que se cree la preferencia dom.allow_XUL_XBL_for_file y se establezca en true . Hay, sin embargo, una característica de la lista blanca que se puede utilizar para permitir a dominios específicos para cargar XUL remotos. La extensión Administrador de XUL remotos te permite administrar esta lista blanca.

Distintos cambios en XUL

  • El atributo {{ xulattr("readonly") }} ahora funciona correctamente para los campos.
  • El elemento {{ xulelem("resizer") }} ahora te permite utilizar el atributo {{ xulattr("element") }} especificar un elemento para cambiar el tamaño, en lugar de cambiar el tamaño de la ventana.
  • El elemento {{ xulelem ("resizer") }} tiene ahora un atributo {{ xulattr("resizer.type", "type") }} que te permite especificar que el cambio de tamaño es para una ventana en vez de un elemento, para evitar así que el cambio de tamaño de la ventana se dibuje dos veces.
  • El atributo "activo" ya no se establece en ventanas XUL activas. En su lugar, puede utilizar la nueva pseudoclase {{ cssxref(":-moz-window-inactive") }} con el fin de asignar distintos estilos a las ventanas de fondo.
  • El atributo {{ xulattr("emptytext") }} se considera obsoleto, así que se debería usar {{ xulattr("placeholder") }} en su lugar.
  • El elemento {{ xulelem("window") }} ahora ofrece un atributo {{ xulattr("accelerated") }} que cuando se establece en true, permite al administrador de capas de hardware acelerar la ventana.
  • El elemento {{ xulelem("stack") }} ahora es compatible con los atributos {{ xulattr("bottom") }} y {{ xulattr("right") }}.
  • Los eventos son ahora lanzados durante la personalización {{ xulelem("toolbox") }}, lo que te permite detectar cambios en las barras de herramientas .
  • El atributo {{ xulattr("alternatingbackground") }} para los elementos {{ xulelem("tree") }} ya no se admite. Se puede usar la seudoclase {{ cssxref(":-moz-tree-row") }} en su lugar.
  • El botón de desbordamiento de la Barra de marcadores con chevronPopup anonid ya no es anónimo, sino que tiene un id. del cliente de "PlacesChevron".
  • El elemento {{ xulelem("tabs") }} tiene ahora una propiedad {{ xulprop ("tabbox") }}, en sustitución de la antigua _tabbox, que ha quedado obsoleta (y nunca fue documentada).
  • Los elementos XUL {{ xulelem("window") }} ahora tienen el atributo {{ xulattr("drawintitlebar") }}. Si está establecido en true , el área de contenido de la ventana incluye la barra de título, lo que permite dibujar en ella.
  • Nuevos eventos TabPinned y TabUnpinned están disponibles, lo que te permite detectar cuándo se fijan o se eliminan las pestñas fijas .
  • El nuevo evento TabAttrModified es enviado cuando cambian los atributos de una pestaña {{ xulattr("label") }}, {{ xulattr("crop") }}, {{ xulattr("busy") }}, {{ xulattr("image") }}, o {{ xulattr("selected") }}.
  • Los elementos {{ xulelem("tab") }} ahora tienen un atributo {{ xulattr("pinned") }}, lo que te permite determinar si una pestaña se encuentra fija actualmente.
  • La clase setDirectionIndicator en los elementos {{ xulelem("tree") }} no ha hecho nada desde hace algún tiempo, por lo que ha dejado de usarse.
  • El elemento {{ XULElem("window") }} tiene ahora un atributo {{ XULAttr("chromemargin") }} que te permite establecer el margen entre chrome y contenido en cada lado de una ventana. Se puede utilizar para dibujar en la barra de título, por ejemplo.
  • El elemento {{ XULElem("window") }} tiene ahora un atributo {{ XULAttr("disablechrome") }} que se utiliza para ocultar la mayor parte del cromo en una ventana cuando éste se está utilizando para mostrar la interfaz de usuario en el navegador, como about:addons .
  • El elemento {{ XULElem("window") }} tiene ahora un atributo {{ XULAttr("disablefastfind") }}, que te permite desactivar la barra de búsqueda en una ventana cuando el contenido no lo admite. Se utiliza, por ejemplo, por el panel de complementos/agregados.
  • Las barras de herramientas ahora pueden ser externas a la caja de herramientas, sin dejar de ser considerada un miembro del {{ XULElem("toolbox") }}, estableciendo la propiedad {{ XULProp("toolboxid") }} del {{ XULElem("toolbox") }}. Además, el elemento {{ XULElem("toolbox") }} tiene ahora una propiedad {{ XULProp("externalToolbars") }}, que enumera todas las barras de herramientas que se consideran miembros de la caja de herramientas.
  • Se ha añadido la compatibilidad para el registro de plantillas de XUL para fines de depuración.

Cambios en la IU que afectan a los desarrolladores

La barra de complementos/agregados
La barra de estado ha sido eliminada en favor de la barra de complementos/agregados. Tienes que actualizar tu extensión para usarla si has agregado anteriormente la IU a la barra de estado.

Almacenamiento

Distintos cambios en la API de almacenamiento

  • La interfaz de {{ interface("mozIStorageBindingParamsArray") }} ahora tiene un atributo de longitud que indica el número de objetos {{ interface("mozIStorageBindingParams") }} de la matriz.
  • {{ ifmethod ("mozIStorageStatement", "bindParameters") }} ahora devuelven un error si está vacía la {{ interface("mozIStorageBindingParamsArray") }} especificada.
  • Se ha añadido el método {{ ifmethod ("mozIStorageConnection", "clon") }}, que permite clonar una conexión de base de datos existente.
  • Se ha añadido el método {{ ifmethod ("mozIStorageConnection", "asyncClose") }}, que te permite cerrar una conexión de base de datos de forma asincrónica. Especificas que se notifique una devolución de llamada cuando la operación de cierre se ha completado.
  • Se ha añadido el método {{ ifmethod ("mozIStorageConnection", "setGrowthIncrement") }} , que permite especificar cuánto se amplía un archivo de base de datos a la vez, con el fin de ayudar a que SQLite reduzca la fragmentación.
  • Ahora se informa sobre el error SQLITE_CONSTRAINT como NS_ERROR_STORAGE_CONSTRAINT en lugar de como NS_ERROR_FAILURE .

XPCOM

Además de los cambios específicos a los que se hace referencia a continuación, es importante tener en cuenta que ya no hay ninguna interfaz inmovilizada. Ninguna de las interfaces está inmovilizada, sin importar lo que la documentación puede decir. Vamos a ir actualizando la documentación con el tiempo.

Cambios XPCOM en Gecko 2.0
Detalles sobre los cambios en XPCOM que afectan a la compatibilidad en Firefox 4.
Components.utils.getGlobalForObject ()
Este nuevo método devuelve el objeto global con el que se asocia un objeto, lo que sustituye a un caso de uso común del ahora eliminado __parent__ .

Lugares

  • Los resultados de las consultas sobre lugares ahora pueden ser vistos por varios observadores y las consultas se pueden ejecutar de forma asincrónica. Esto significa que ha habido algunos cambios en las interfaces {{ interface("nsINavHistoryResult") }}, {{ interface("nsINavHistoryQueryOptions") }} y {{ interface("nsINavHistoryContainerResultNode") }} De manera más significativa, la interfaz de {{ interface("nsINavHistoryResultViewer") }} ha cambiado el nombre a {{ interface("nsINavHistoryResultObserver") }}.
  • Algunas notificaciones nuevas se han agregado para permitir que el navegador realice de manera más fiable el seguimiento del proceso de cierre del servicio Lugares. De estos, la mayoría son para uso interno, pero la notificación places-connection-closed está disponible para conocer cuándo el servicio de Lugares ha completado su proceso de cierre.
  • El parámetro de salida del tamaño de la matriz ahora es opcional en varios métodos de Lugares.
  • La compatibilidad para <menupopup type="places"> se ha eliminado. En su lugar, es necesario crear y rellenar de forma manual un menú con información de Lugares. Véase Visualización de información de Lugares a través de las vistas: vista de los menús para obtener más detalles.

Cambios en la interfaz

  • Las interfaces {{ interface("nsIDocShell") }} and {{ interface("nsIWebBrowser") }} tienen ahora un nuevo atributo isActive, que se utiliza para permitir la optimización de las rutas de código para los documentos que actualmente no están visibles.
  • El método {{ interface("nsIMemory") }} {{ ifmethod("nsIMemory","isLowMemory") }} ha quedado obsoleto. Se recomienda usar en su lugar las notificaciones de "presión de memoria" para observar las situaciones de baja memoria.
  • La API para controlar redirecciones en los canales HTTP ha cambiado para dejar que se procesen de forma asincrónica. Cualquier código que implemente el control de redirecciones a través de {{ ifmethod("nsIChannelEventSink", "onChannelRedirect") }} debe actualizarse y utilizar {{ ifmethod ("nsIChannelEventSink", "asyncOnChannelRedirect") }} en su lugar. Éste acepta un controlador de devolución de llamada que se debe llamar cuando una redirección se completa con éxito.
  • Se ha añadido el método {{ ifmethod("nsINavHistoryResultObserver", "batching") }}, proporcionando una forma de agrupar en lotes las operaciones de Lugares, reduciendo el número de notificaciones de actualización emitidas, lo cual puede mejorar el rendimiento cuando los observadores están realizando tareas relacionadas (como recargar vistas).
  • La interfaz {{ interface("nsIPref") }}, que hace tiempo quedó obsoleta, ha sido finalmente eliminada. Si aún no has cambiado a {{ interface("nsIPrefService") }}, ahora es el momento.
  • Las interfaces {{ interface("nsISessionStore") }} y {{ interface("nsISessionStartup") }} han experimentado cambios para admitir el restablecimiento de sesión a petición. Consulta el método {{ ifmethod("nsISessionStore", "restoreLastSession") }}.
  • Los métodos {{ interface("nsIPrincipal") }} {{ ifmethod("nsIPrincipal", "subsumes") }} y {{ ifmethod("nsIPrincipal", "checkMayLoad") }}, así como su origin , csp , y los atributos URI, que anteriormente sólo estaban disponibles a partir de código nativo, ya lo están desde script.
  • La interfaz {{ interface("nsIPrompt") }} es ahora compatible con las alertas modales sobre pestañas. Puedes ver Uso de los indicadores modales sobre pestañas si quieres tener más detalles.

Administración de la memoria

Asignación de memoria infalible
Mozilla proporciona ahora asignadores de memoria infalibles que están garantizados para no devolver null. Es recomendable leer este artículo para saber cómo funcionan y cómo solicitar explícitamente la asignación de memoria falible frente a infalible.

Otros cambios

  • La mayor parte de los recursos contenidos dentro de Firefox se han combinado en un único archivo JAR, omni.jar , lo que mejora el rendimiento de inicio mediante la reducción de E / S. Para obtener más información, lee Acerca de omni.jar.
  • La preferencia accessibility.disablecache ya no es compatible. Se expuso sólo para fines de depuración y ya no se utiliza.
  • Los complementos/agregados cuyo GUID (Identificador Exclusivo Global) cambia de una versión a otra ya se pueden actualizar correctamente.
  • Como efecto secundario de la eliminación de directorios específicos de la plataforma en los paquetes de complementos/agregados, ya no se pueden ofrecer diferentes preferencias por defecto para cada plataforma.
  • De manera predeterminada, las extensiones ya no se desempaquetan al ser instaladas, sino que se ejecutan directamente desde el archivo XPI. Pueden usar la propiedad unpack del install manifest para elegir el comportamiento anterior. Asimismo, las extensiones que usan componentes binarios, DLLs cargadas con ctypes, plugins de búsqueda, diccionarios e iconos de ventana deben especificar que tienen que ser desempaquetadas. 

Otros cambios

Eliminada la compatibilidad para Gopher
El protocolo Gopher ya no se admite de forma nativa. Con la extensión OverbiteFF podrás continuar la compatibilidad.
Control de eventos de proceso de contenido
A fin de hacer compatibles los plugins fuera de proceso y otras funciones de procesos múltiples, se ha introducido una nueva API para admitir el envío de mensajes a través de los procesos.
Extensiones de arranque
Ahora puedes crear extensiones que pueden instalarse, desinstalarse y actualizarse (o instalar la versión anterior) sin necesidad de reiniciar el explorador.
Eliminado el plugin predeterminado
Se ha eliminado el plugin por defecto. Asimismo, se ha eliminado de manera predeterminada la carpeta de plugins de aplicaciones. La carpeta de plugins de aplicaciones también ha sido eliminada por defecto, sin embargo la compatibilidad para la instalación de plugins a través de esta carpeta continúa. Mira {{ bug("533891") }}.
El Administrador de complementos/agregados sustituye al Administrador de extensiones
{{ interface("nsIExtensionManager") }} ha sido sustituido por AddonManager .
Ya no se utilizan los HWNDs secundarios
Firefox ya no crea HWNDs secundarios para su uso interno en Windows. Si has escrito una extensión que utiliza código nativo para manipular estos HWNDs, no te funcionará en Firefox 4. Tendrás que dejar de usar HWNDs o ajustar el código que se basa en HWNDs a un plugin NPAPI. Eso es mucho trabajo, por lo que si puedes evitar el uso de HWNDs directamente, hazlo.
Cambios de gestos
Los tres gestos de pasar los dedos por los trackpads se han sustituido, de manera predeterminada, por abrir y cerrar la vista Firefox Panorama (TabCandy). Para volver a cambiar a los comandos anteriores de desplazamiento hacia arriba y desplazamiento hacia abajo, abre about: config y ajusta browser.gesture.swipe.down a cmd_scrollBottom y browser.gesture.swipe.up a cmd_scrollTop .

Consulta también

{{ languages( { "en":"en/Firefox_4_for_developers", "de": "de/Firefox_4_für_Entwickler", "ja": "ja/Firefox_4_for_developers", "zh-tw": "zh_tw/Firefox_4_for_developers"} ) }}

Etiquetas y colaboradores del documento

 Colaboradores en esta página: mrstork, teoli, inma_610, Izel, deimidis
 Última actualización por: mrstork,