Establecer metaetiqueta de charset con JavaScript

Hay un error que estoy tratando de rastrear aquí: https://github.com/OscarGodson/EpicEditor/issues/184#issuecomment-8805982

En función de toda la información, parece que se debe a que el navegador está predeterminado en el juego de caracteres nativo del usuario (en este caso, ISO-8859-1 ) y no en UTF-8 como en mi máquina y en otros en los EE. UU. Supongo que una solución es usar HTML para forzar la encoding a UTF-8 con:

   

o

  

Sin embargo, el 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 recibir lo siguiente inyectado en el DOM:

  

Y en el segundo ejemplo, el http-equiv no se está configurando:

 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 HTML:

  

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” en el que puedo pensar es de alguna manera usar innerHTML …

No 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 en la propiedad httpEquiv, por lo que

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

crearía el meta elemento 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.

Como dijo Alohci, la creación de metatags 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 estar al principio de acuerdo con las especificaciones de HTML5. Vea esta respuesta . Este simple detalle ha llevado a un error importante en mi aplicación 🙂

Deberías usar más bien:

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