簡體   English   中英

使用 JavaScript 設置字符集元標記

[英]Set charset meta tag with JavaScript

我試圖在這里追蹤一個錯誤: https : //github.com/OscarGodson/EpicEditor/issues/184#issuecomment-8805982

根據所有信息,似乎是因為瀏覽器默認使用用戶的本機字符集(在本例中為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 ......

您無法通過設置 charset 屬性來設置 charset 內容屬性,因為它們不會相互反映。 事實上,沒有反映字符集內容屬性的屬性。

http-equiv 內容屬性由 httpEquiv 屬性反映,因此

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

將正確創建元元素。

但這都不重要。 字符集是由解析器建立的,所以在解析完 HTML 之后在 JavaScript 中構造元元素對文檔的字符集完全沒有影響。

正如 Alohci 所說,從 JS 創建與字符集相關的元標記不會對當前頁面產生太大影響。

在我的用例中,我需要能夠將當前頁面序列化為字符串並將其保存到某個后端。 附加缺少的字符集元標記(如果不存在)對於此類用例很有用。

作為側節點,不要忘記根據 HTML5 規范,字符集元標簽應該在開頭 看到這個答案 這個簡單的細節導致了我的應用程序中的一個重要錯誤 :)

你應該使用:

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

我同意@alohci 和@sebastien-lorber 的答案。

但只是解決您的原始問題

<meta>

使用 setAttribute 方法

charsetMetaTag.setAttribute("charset", "UTF-8");

並遵循@sebastien-lorber 的建議,將輸出

<meta charset="UTF-8">

作為 head 的第一個子元素

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM