2012-09-24 33 views
12

Hay un insecto que estoy tratando de localizar aquí: https://github.com/OscarGodson/EpicEditor/issues/184#issuecomment-8805982Conjunto charset etiqueta meta con JavaScript

Sobre la base de toda la información que parece como si fuera ya que el navegador utiliza de forma predeterminada juego de caracteres nativo del usuario (en este case, ISO-8859-1) y no UTF-8 como en mi máquina y otros en los EE. UU. Supongo que una solución es utilizar HTML para forzar la codificación a UTF-8 con:

<meta charset='utf-8'> 

o

<meta http-equiv='Content-Type' content='Type=text/html; charset=utf-8'> 

Sin embargo, la JS no está funcionando. En el primer ejemplo:

charsetMetaTag = self.editorIframeDocument.createElement('meta'); 
charsetMetaTag.charset = 'utf-8'; 
self.editorIframeDocument.getElementsByTagName('head')[0].appendChild(charsetMetaTag); 

acabo de volver los siguientes inyecta en el DOM:

<meta> 

Y en el segundo ejemplo no se está estableciendo la http-equiv:

charsetMetaTag = self.editorIframeDocument.createElement('meta'); 
charsetMetaTag['http-equiv'] = 'Content-Type'; 
charsetMetaTag['content'] = 'text/html; charset=utf-8'; 
self.editorIframeDocument.getElementsByTagName('head')[0].appendChild(charsetMetaTag); 

Obtengo el siguiente código HTML:

<meta content="text/html; charset=utf-8"> 

Sí, tengo que hacer esto de forma dinámica ya que creo dinámicamente los iframes. Puede que ni siquiera sea el problema, pero así es como se ve. El único "truco" que se me ocurre es el uso de innerHTML ...

Respuesta

18

No se puede establecer el atributo de contenido del juego de caracteres estableciendo la propiedad del juego de caracteres porque no se reflejan entre sí. De hecho, no hay ninguna propiedad que refleje el atributo de contenido del juego de caracteres.

El atributo de contenido http-equiv se refleja directamente en el hotel httpEquiv por lo

charsetMetaTag['httpEquiv'] = 'Content-Type'; 

crearía el elemento meta correctamente.

Pero nada de esto importa. El conjunto de caracteres lo establece el analizador sintáctico, por lo que construir el elemento meta en JavaScript una vez que se haya analizado el HTML no tendrá ningún efecto en el conjunto de caracteres del documento.

0

Como dijo Alohci, la creación de metaetiquetas relacionadas con charset de JS no tendrá mucho efecto en la página actual.

En mi caso de uso, necesito poder serializar la página actual como una cadena y guardarla en algún back-end. Agregar una metaetiqueta de juego de caracteres faltante (si no está presente) es útil para dicho uso.

Como nodo lateral, no olvide que las metatags de juego de caracteres deben ser al comienzo de de acuerdo con las especificaciones de HTML5. Ver this answer. Este simple detalle ha llevado a un fallo importante en mi aplicación :)

Usted no debe usar:

document.head.insertBefore(charsetMetaTag,document.head.firstChild); 
Cuestiones relacionadas