2012-09-24 6 views
12

Jest to błąd Próbuję namierzyć tutaj: https://github.com/OscarGodson/EpicEditor/issues/184#issuecomment-8805982Ustaw charset tag meta z JavaScript

Na podstawie wszystkich informacji wydaje jak to dlatego, że przeglądarka jest zalegających do użytkownika natywnego kodowania (w tym sprawa, ISO-8859-1), a nie UTF-8 jak na moim komputerze i innych w USA. Zgaduję, że poprawka jest użycie kodu HTML, aby wymusić kodowanie do UTF-8 z:

<meta charset='utf-8'> 

lub

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

Jednak JS nie działa. W pierwszym przykładzie:

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

prostu wrócić następuje wstrzykiwane do DOM:

<meta> 

A w 2. przykład http-equiv nie jest ustawiony:

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

Otrzymuję następujący kod HTML:

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

Tak, trzeba to zrobić dynamicznie jako dynamicznie tworząc iframe. Może to nie być nawet problem, ale tak właśnie wygląda. Jedynym "hack", jaki mogę wymyślić jest użycie innerHTML ...

Odpowiedz

18

Nie można ustawić atrybutu zawartości zestawu znaków, ustawiając właściwość zestawu znaków, ponieważ nie odzwierciedlają się nawzajem. W rzeczywistości nie ma żadnej właściwości, która odzwierciedlałaby atrybut zawartości zestawu znaków.

atrybut zawartość http-equiv jest odzwierciedlone przez właściwość httpEquiv tak

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

by poprawnie utworzyć elementu meta.

Ale nic z tego nie ma znaczenia. Zestaw znaków jest ustalany przez analizator składni, więc skonstruowanie elementu meta w JavaScript po przetworzeniu kodu HTML nie będzie miało żadnego wpływu na zestaw znaków w ogóle.

0

Jak powiedział Alohci, tworzenie metatagów związanych z charset z JS nie będzie miało większego wpływu na bieżącą stronę.

W moim usecase, potrzebuję móc serializować bieżącą stronę jako ciąg i zapisać ją do jakiegoś backendu. Dołączanie meta tagu brakujących zestawów znaków (jeśli nie jest obecny) jest przydatne dla takiego przypadku.

Na marginesie węzła, nie zapomnij, że metatagi charset powinien być na początku według specyfikacji HTML5. Zobacz this answer. Ten prosty szczegół prowadzić do istotnego błędu w mojej aplikacji :)

Powinieneś raczej użyć:

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