2012-09-24 70 views
12

還有就是我想在這裏追蹤一個錯誤:https://github.com/OscarGodson/EpicEditor/issues/184#issuecomment-8805982集字符集meta標籤使用JavaScript

基礎上的所有信息是似乎喜歡它是因爲瀏覽器默認爲用戶的本地字符集(在此情況下,ISO-8859-1)而不是UTF-8像我的機器和美國其他人。我猜測,一個解決辦法是使用HTML,迫使編碼UTF-8有:

<meta charset='utf-8'> 

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

然而,JS是行不通的。在第一個例子:

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

我剛剛得到以下注入到DOM:

<meta> 

而在第二個例子中,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); 

我得到以下HTML:

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

是的,我需要動態地創建iframe來動態創建。這可能不是問題,但這就是它的樣子。唯一的「黑客」我能想到的是某種使用的innerHTML的...

回答

18

無法通過設置charset屬性,因爲它們不反映對方設置的字符集的內容屬性。實際上沒有反映字符集內容屬性的屬性。

HTTP的當量含量屬性由屬性httpEquiv反射所以

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

將正確地創建的元元件。

但沒有這個問題的。字符集由解析器建立,所以在HTML解析完成後在JavaScript中構建元素元素根本不會影響文檔的字符集。

0

正如Alohci說,從創建JS字符集相關的meta標籤不會有當前頁面上太大的影響。

在我的用例,我需要能夠序列化當前頁面作爲一個字符串,並將其保存到一些後端。追加一個缺少的字符集元標記(如果不存在)對於這樣的用例很有用。

作爲一個側面節點,根據HTML5規範,不要忘記在的開頭處的字符集元標記應該是。見this answer。這個簡單的細節都導致我的應用程序:)

一個重要的錯誤,您應該寧願使用:

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