2010-11-04 12 views
143

En base a esta pregunta: jQuery code not working in IEJavascript tipo MIME

Así text/javascript se utiliza en documentos HTML, de modo Internet Explorer puede entenderlo. Pero me pregunto, ¿cuándo utilizarías application/javascript, y más importante aún, por qué lo usarías en lugar de text/javascript?

+0

posible engaño/explicación: http://stackoverflow.com/questions/876561/when-serving-javascript-files-is-it-better-to-use-the-application-javascript-o – Benn

+0

Véase también http: //stackoverflow.com/questions/2325571/for-http-responses-with-content-types-suggesting-character-data-which-charset-sh – Gumbo

+0

posible duplicado de [¿Qué es el tipo Javascript MIME? ¿Qué pertenece al atributo de tipo de una etiqueta de script?] (http://stackoverflow.com/questions/189850/what-is-the-javascript-mime-type-what-belongs-in-the-type-attribute-of-a-script) – Bergi

Respuesta

224

En teoría, de acuerdo con RFC 4329, application/javascript.

La razón por la que se supone que es application no tiene nada que ver con si el tipo es legible o ejecutable. Se debe a que hay mecanismos de determinación de conjunto de caracteres personalizados establecidos por el idioma/tipo en sí, en lugar de solo el parámetro genérico charset. Un subtipo de text debe ser capaz de ser transcodificado por un proxy a otro conjunto de caracteres, cambiando el parámetro de conjunto de caracteres. Esto no ocurre con JavaScript porque:

a. el RFC dice que los user-agents deberían estar haciendo un BOM-sniffing en el script para determinar el tipo (aunque no estoy seguro de que algún navegador lo haga);

b. los navegadores usan otra información, incluida la codificación de la página y en algunos navegadores, el atributo script charset, para determinar el juego de caracteres. Por lo tanto, cualquier proxy que intente transcodificar el recurso rompería sus usuarios. (Por supuesto, en realidad, nadie nunca utiliza proxies de transcodificación de todos modos, pero esa fue la intención.)

Por lo tanto los bytes exacta del archivo deben ser preservadas exactamente, lo que hace que sea un binario tipo application y técnicamente no es de carácter -basado en text.

Por la misma razón, application/xml es oficialmente preferido sobre text/xml: XML tiene sus propios mecanismos de señalización de chaset en banda. Y todo el mundo ignora application para XML, también.

text/javascript y text/xml puede que no sea la cosa correcta, pero hay lo que todos usan hoy en día por razones de compatibilidad, y las razones por las que no son lo correcto prácticamente no tienen importancia.

+3

Gracias una gran explicación. –

+4

La solución más "compatible" es no incluir ningún tipo de contenido en la respuesta. RFC establece que sin un tipo de contenido explícito, el receptor lo interpretaría * "por contexto" *, que es siempre el comportamiento correcto para todos los navegadores desde el primer navegador – Pacerier

+0

Gracias por los detalles. –

5

application porque .js -Los archivos no son algo que un usuario quiera leer, sino algo que debe ser ejecutado.

+0

Esa es la respuesta oficial, pero IE se atraganta con eso. – Benn

+15

@Benn: ¿Quizás porque los usuarios de IE tienen que leer todos los archivos JS porque no se ejecutan correctamente? Al menos, es honesto por Microsoft;) – thejh

+0

Me encanta su comentario, pero desafortunadamente las personas que no pueden leer Javascript todavía usan IE, así que tenemos que lidiar con eso :(. –

15

El problema con el tipo MIME de Javascript es que no ha sido un estándar durante años. Ahora tenemos application/javascript como un tipo MIME oficial.

Pero en realidad, el tipo MIME no importa en absoluto, ya que el navegador puede determinar el tipo en sí. Es por eso que las especificaciones de HTML5 indican que el type="text/javascript" ya no es necesario.

1

application-javascript es el tipo correcto de usar, pero como no es compatible con IE6-8 va a estar atascado con texto/javascript. Si no le importa la validez (HTML5 excluido), simplemente no especifique un tipo.

+0

¿De dónde sacaste esto? Estoy bastante seguro de que es compatible. O, al menos, será ignorado. – Zenexer

+0

@Zenexer leyó [su respuesta a otra pregunta] (http://stackoverflow.com/a/4101106/124119). Al parecer, la compatibilidad de IE significa que no 'application/javascript'. –

+0

@CamiloMartin Lo uso bien con IE hasta 6 todo el tiempo. Simplemente configuran por defecto a JavaScript. – Zenexer

Cuestiones relacionadas